[title = Test Platformu - Blm 2]Merhaba sevgili Plazma okuyucular. Plazma'nn birinci saysnda balayan "Test Platformu" kesinde nceki sayda HTML, Java Script, VBScript, VML, ActiveX, TinyPTC gibi eitli dil, nesne ve ktphanelerin, yapmak istediiniz programlar hzlca test etmek iin nasl kullanldn grm ve rneklendirmitik. Bu sayda ise geen saynn sonlarnda giri yaptmz "bu yntemlerin baka platformlar iin kullanlmas" konusundan devam ediyoruz.

[b]Hangi Gelitirme Platformlarndan Bahsediyoruz?[/b]

Burada bizi ilgilendiren en nemli nokta, altmz "bilgisayar, iletim sistemi, bu sistem iin gelitirilmi uygulamalar" lsnn, program gelitirmek istediimiz platformdaki ayn lden daha stn olmasdr. Ksacas PC'yi, MAC'i ya da Amiga'y Commodore 64 zerinde program gelitirmek iin kullanmak mantklyken Commodore 64' ters ihtimallerde kullanmak ok anlaml olmayacaktr. Peki, imdi bu bahsettiimiz "bilgisayar, iletim sistemi, bu sistem iin gelitirilmi uygulamalar" lsn tek tek ele alalm.

1) Bilgisayar: Burdaki en nemli kriterlerden biri kullandmz bilgisayarn, program gelitirmeyi amaladmz bilgisayardan hzl ve/veya yapca stnlkler salamasdr. Bylelikle hedef bilgisayarda saatler srebilecek baz hesaplamalar setiimiz bilgisayar platformunda dakikalar hatta saniyeler mertebesinde yapmamz mmkn olacaktr.

2) letim sistemi: Aslnda iletim sistemi tercihinin nemi bundan sonraki maddeyle ok daha ilgilidir. Ancak seeceimiz iletim sisteminde ayn anda birok uygulamay altrabilmek iin multitasking olmas (tm modern iletim sistemleri bu yapdadr) ve kullancnn bu iletim sistemine hakim olmas ok nemlidir.

3) Bu sistem iin gelitirilmi uygulamalar: te iletim sistemi asl bu noktada nem kazanyor. Bize hedef bilgisayarmzla ilgili kullanabileceimiz en gelimi uygulamalar sunan, en iyi emlasyon programlarna sahip platformlar, bizim iin en ideal platformlardr.
[img = CTR data/articles/test_platformu/pc.gif]Ksacas o platform zerindeki "en gelimi iletim sistemi" bu durumda en ideal iletim sistemi olmayabilir. Bizim iin en ideali hakim olduumuz ve bu gne kadar zerinde uratmz konuyla ilgili yeterli uygulama barndran iletim sistemleridir. Yeterli sayda uygulama olmayan bir iletim sistemini kullanmakta israr eden kullanc, eksik uygulamalar kendisi yazmak zorunda kalacaktr.

Gerek kendi alma ortamm, gerekse nceki saynn devam olmas nedeniyle gelitirme platformunu PC ve iletim sistemini Windows olarak ele alacam. Ancak anlatacam yntemler kolay bir ekilde baka iletim sistemleri, hatta hatta baka bilgisayarlara uyarlanabilir.

[b]Hangi Hedef Platformlardan Bahsediyoruz?[/b]

Evet bir de hedef platformlarmz var, yani hazrladmz programn almasn amaladmz ve gelitirme platformunu ara olarak kullandmz platformlar.

Bu platformlar neler olabilir? Atari 800XL, Atari ST, Commodore 64/128, Sinclair, Amstrad, Amiga, GameBoy, Play Station v.b. Peki ncelikle son rnekleri ele alalm. Diyelim ki Play Station III'e uygulama gelitirmek iin PC kullanyoruz. Bu mantkl m? Play Station III kullandmz PC'den daha gl bir donanma sahipse neden dorudan PS III zerinde uygulama gelitirmiyoruz? Elbette ki PC kullanmak mantkl, hatta hatta baz platformlarda uygulama gelitirmek iin alternatifimiz olmayabilir. Play Station rneini kasti olarak verdim. Ancak hi zerinde durmayacam. Bizi burada ilgilendiren rnekler daha ok Atari, Commodore, Amiga gibi rnekler. Oyun konsollar ve gelimi donanmlar arasnda apraz gelitirme bu dkmann konusuna girmiyor.
[img = CTR data/articles/test_platformu/c64.gif]Bu dkman yazmamda yola ktm nokta olmas nedeniyle Commodore 64' hedef platform olarak seiyorum. Yazda burdan sonra kullanlacak gelitirme platformu PC, hedef platform ise Commodore 64 olarak ele alnacaktr.

[b]PC Kullanarak Commodore 64 zerinde apraz Gelitirme[/b]

Geen sayda verdiimiz n bilgiler ve bu saydaki giriin ardndan, sonunda asl konumuza geebiliriz.

PC'de gelitireceimiz uygulamalar elbette ki normal koullarda Commodore 64'de almayacaktr. Bunun en temel nedeni iki platformun makine dili yaplarnn birbirinden ok farkl olmasdr. Ksacas 2 ile 3' toplayan bir program bile PC'den Commodore 64'e aktarmamz mmkn deildir. yleyse yapmamz gereken ey yazacamz programlarn Commodore 64 yani 6502 mikroilemcinin yorumlayabilecei ekilde derlenebilecei bir uygulama bulmaktr. PC'de bu ii yapan "The ACME Crossassembler", "CC65", "ADC-65", "The COMFY 6502 Compiler" gibi birok uygulama mevcuttur. Ancak kullanc diledii taktirde kendi derleyicisini yazabilir ya da kaynak kodu ak derleyicilerden birini kendine gre modifiye edebilir.

lk sorunumuzu zdkten sonra karmza baka bir sorun kyor. "Derleyici editr" ihtiyac. Programlarmz notepad'de yazp daha sonra DOS ekranndan parametrik komutlarla derlememiz mmkn. Mmkn olmasna mmkn ancak pratik deil. Projeler bydke renklendirilmi editr ekranlar, regular expression destekleyen bul&deitir zellii, eitli ksayol tular gibi ihtiyalar artacaktr. Bunun iin Windows zerinde "EditPlus" tavsiye ederim. EditPlus shareware bir uygulama olduu iin free bir editr tercih edenler ise aralarndan Windows, Linux ve MacOS'un da yer ald 10'dan fazla platform destei sunan "Emacs"i tercih edebilirler. Bu ve benzeri editrler apraz gelitirme srecinde iimizi olduka kolaylatracaklardr.

Geriye tek bir sorun kald. Commodore 64'n yorumlayabilecei byte kodlar rettiimizi varsayalm. Peki bunun sonucunu nasl greceiz? Elbette ki bunun iki yolu var.

1) PC'den Commodore 64'e veri transferi
      i) Dosya transferi
      ii) Dorudan Commodore'un belliine veri aktarm
2) PC zerinde emlatr kullanm

imdi bu iki yntemi biraz detaylandrarak anlatalm.

PC'den Commodore 64'e veri transfer etmenin birka farkl yolu var. Bunlarn en ok kullanlan X1541 kablosu ve trevleridir. Bu kablo PC ile Commodore 64 arasnda dorudan bir balant salamaz. Bunun yerine PC'nin paralel portu ile disket src (1541, 1541-II gibi) aras balant salar. Bu sayede PC'de gelitirilen uygulamalar Commodore 64'n kendi formatndaki disketlere kopyalanabilir ve daha sonra Commodore 64 ile altrlp test edilebilir. Son yllarda MMC64 gibi ok daha gelimi transfer (MMC64'n veri transferinden ok daha fazla ve nemli zellii var, internette bu konu zerine biraz srf yapmanz tavsiye ederim) yntemleri gndemde. Nightshift partisinde GO64'n standn ziyaret edenlerdenseniz bir MMC64 sahibi olma ansn elde etmisiniz demektir. Umarm bu ans karm olmazsnz. Bu yntemlerin haricinde IDE64, 1581, PC zerinde 5.25" disket srcler v.b. teknolojileri veri transferinde kullanmann eitli yollar mevcut. Ancak imdilik bize transfer konusunda bu kadar detay gerekmiyor.

PC'den Commodore'a veri transfer etmeden Commodore iin gelitirdiimiz programlarn sonucunu PC'de grmenin tek yolu emlasyondur, yani Commodore 64'n tm donanmn, makine dilini, zerinde gelen ROM'u, alma presiplerini yazlmla simle etmektir. Bu elbette ki hi kolay bir i deildir ve kullancnn kendi bana byle bir ie kalkmas ok uzun soluklu bir projeye girimesi demektir ki baar ans da ok yksek olmayacaktr. Ancak ne mutlu ki gnmzde Vice ve CCS64 gibi birok Commodore 64 emlatr mevcut ve birou olduka baarl sonular veriyor. Vice aralarnda en gelimii denilebilir ve %99'a varan bir uyumlulukla Commodore 64' PC zerinde altrabiliyor.

imdi gelelim karar aamasna. Yntem olarak transferi mi yoksa emlasyonu mu semeliyiz? Birbirlerine gre avantajlar neler? Cevap ise her ikisini birden kullanmamz gerektiidir. nk hibir Commodore 64 emlatr, programlar altrmada %100'e varan baarya ulasa da grnt ve zellikle de ses emlasyonunda yeterli baary gsteremez. Bunun balca sebebleri PC monitrleriyle Commodore'un kendine zel monitrleri ve televizyon knn etkisinin yaratlamamas ve Commodore'un ses ipi olan SID'in analog yapsnn PC'deki ses kartlaryla emle edilememesidir. Bu durumda gelitirilen programlarn tam olarak sonularn grmek iin Commodore 64'e transfer etmemiz bir zorunluluktur. Ancak elbette ki bu da gelitirme srecini yavalatacak bir unsurdur. nk programc programlar gelitirirken sk sk sonularn grmek isteyecektir. Transfer ilemi ise dakikalar alabilen bir ilemdir. Bu durumda programcnn her defasnda programn kaydedip, transfer edip, sonucuna bakmas bir sre sonra ikenceye dnecektir. Dolaysyla PC'de gelitirdiimiz programlar dorudan Commodore 64'n belleine derleyen bir dzeneimiz olmad srece en pratik metot, gelitirme srecinde ara testler iin emlatrleri kullanp, tam sonular grmek iin ise Commodore 64'e transfer etmektir.

Gnmzde ne kadar gvenilir hale gelmi olurlarsa olsunlar, yine de emlatrlerin sonular tam gvenilir deildir. zellikle ince zamanlamalar gerektiren tek bir cycle'n bile nemli olabildii konularda (raster barlar, border ama, multiplexerlar v.s.) tek bir emlatrn sonucuna gvenmek yerine birden fazla emlatr ile test etmek daha gvenilirdir. Hem Vice'da hem CCS64'de ayn ekilde alan bir program byk olaslkla gerek Commodore 64'de de aynen alacaktr.

Uyar! Zaman zaman Vice'da ve CCS64'de hibir sorun gzkmedii halde gerek Commodore 64'de almayan programlar olabilir. Gerek Commodore'da test edilmeden hibir uygulamann datlmamasn nemle tavsiye ederim. zellikle IRQ loader kullanan ok paral programlar ve ok ince VIC hileleri ieren efektler Commodore 64'e transfer edilerek test edilmelidirler.

Yukarda alternatifleriyle bahsettiim derleyiciler, editrler ve emlatrlerden bu yaznn geri kalannda kullanacaklarmz AMCE, EditPlus ve Vice lemesidir. Bunlarn arasnda u ekilde bir hiyerari kullanacaz.
[img = CTR data/articles/test_platformu/trilogy-schema.gif]Bu yapy oluturmak iin yalnzca EditPlus'n "Tools->Configure User Tools" mensn kullanmak yeterli. Bu blmde yer alan "Capture Output" seeneini kullanarak ACME'den dnecek hata mesajlarn editrn iersinden grmeniz mmkndr. Gerektii taktirde "Capture Output" seeneini kullanmamak kaydyla kendinize zel batch scriptleri de (BAT uzantl dosyalar) yazabilir ve derleme, altrma ilemleri arasna bir tua baslana kadar bekleme gibi zellikler ekleyebilirsiniz (DOS'daki "pause" komutu). Gerekli ayarlamalar yaptktan sonra EditPlus'da CTRL+(1-9) tuunlarna basarak programnz derleyebilir, sonucunu emlatrden grebilirsiniz.

u ana kadar arlkl olarak teorik bilgi verdik, bundan sonra daha ok pratik bilgilerle ilerleyeceiz.

"Merhaba Dnya" rnei

Artk ilk programmz yazabiliriz. Ancak bu dkmanla ilgili unutulmamas gereken nemli bir nokta, dkmann makine diliyle ilgili temel kavramlar iermedii ve okuyucunun balang dzeyinde de olsa makine dili bildiini varsayddr. Bu konuda yeterli alt yaps olmayan okuyucular iin yazya devam etmeden nce Trke kaynak olarak smail ahin'in (Hades/Ascraeus) "[url = http://www.c64turkiye.com/]C64 Trkiye Dergisi[/url]" ve Bilgem akr'n (Nightlord/Glance) "[url = http://nightlord.dr2.net/]Nightblog[/url]" isimli Blog'unda yer alan dkmanlar okumalarn tavsiye ederim.

Evet imdi EditPlus'mz (ya da alternatif editrmz) ayoruz ve aadaki program yazyoruz.

[b]hello.a[/b]
[code]!to "hello.prg"

        * = $080d
        lda #<yazi
        ldy #>yazi
        jsr $ab1e
        rts

yazi    !text "MERHABA DUNYA"
        !byte 0
[/code]
Bu program derledikten sonra emlatr ekrannda "SYS 2061" yazarak program altrabilirsiniz. Elbette ki programlar otomatik alabilir hale getirmek iimizi ok daha kolaylatracaktr. Bunun iin programn bana iki satr eklememiz yeterlidir.
[code]  !to "hello.prg"

        * = $0801
        !byte $0c, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00

        * = $080d
        lda #<yazi
        ldy #>yazi
        jsr $ab1e
        rts

yazi    !text "MERHABA DUNYA"
        !byte 0
[/code]
[img = CTR data/articles/test_platformu/hello.gif]Bu eklenen satrlar Commodore 64'n Basic'inde "0 SYS 2061" komut satrna tekabl eden bytelar ierir. $0801 adresi ise Commodore'un varsaylan Basic balang adresidir. Dolaysyla bu program otomatik olarak "MERHABA DUNYA" kts verecektir.

EditPlus kullanmayanlar DOS ekranndan ACME'ye "hello.a" dosyasn parametre olarak vererek de "hello.prg" dosyasn elde edebilirler. rnek:

C:\Acme>acme c:\myapps\hello.a

Bu komut satrn altrdnzda, bulunduunuz klasrde "hello.prg" dosyas oluacaktr. Daha sonra Vice ya da CCS64 gibi bir emlatr ile bu dosyay altrabilirsiniz. Vice'da prg dosyalarn kolayca altrmak iin srkle&brak yntemini tavsiye ederim.

imdi gelelim programn aklamasna. $ab1e adresi Commodore 64 Basic ROM'unda yer alan STROUT yani "Output String" ROM adresine denk gelir (bkz: [url = http://www.tkk.fi/Misc/cbm/docs/c64-rom.html]Link[/url]). Bu adres, ekrana basaca yaznn adresinin alt ve st bytelarn srasyla A ve Y registerlarndan okur. Commodore 64'de bellek adresleri 16 bit, ancak registerlar 8 bittir. Bu yzden bir bellek adresine iaret etmek iin her zaman (zero page yani $0000-$00FF adres aral hari) iki byte ya da iki register kullanlr. $ab1e adresi "yazi" etiketinden itibaren 0 (sfr) byten grd yere kadar olan tm karakterleri ekrana basar.

Elbette ki ekrana yaz yazdrmann tek yolu bu deildir. Commodore'un varsaylan ekran adresleri $0400-$07e7 aralndadr. Dolaysyla ekrann bandan itibaren sabit bir karakter saysndaki texti transfer rutiniyle de ekrana bastrabiliriz. Ancak bu durumda "!text" yerine "!scr" kullanmamz gerekecektir.

[b]hello2.a[/b]
[code]        !to "hello2.prg"

        * = $0801
        !byte $0c, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00

        * = $080d
        ldx #$00
loop    lda yazi,x
        sta $0400,x
        inx
        cpx #$0d
        bne loop
        rts

yazi    !scr "merhaba dunya"[/code]
[img = CTR data/articles/test_platformu/hello2.gif]Bu rnek ekrann en sol st kesinden itibaren "merhaba dunya" yazacaktr. Burdaki "cpx #$0d" satrnda yer alan $0d, desimal say sisteminde 13'e karlk gelir ki bu da "merhaba dunya" yazsnn toplam karakter saysna eittir. Farkl uzunluklardaki yazlar ekrana bastrrken $0d deerini yaznn uzunluuna gre deitirmek gerekecektir.

[b]"Sins Hareketi" rnei[/b]

Merhaba dnya rneinden sonra biraz byk bir atlay gibi gzkse de aslnda yazacamz program ok ksa ve basit bir program. Programn en byk zellii sins fonksiyonuna ihtiya duymas. Commodore 64'n makine dilinde sins iin zel bir operatr mevcut deil. Bunun iin ya Basic ROM'undan sins fonksiyonunu kullanmamz gerekmekte ya da kendi sins rutinimizi yazmamz. Bu iki metodun da sonucu ok hzl olmayacaktr. En pratik yol sins deerlerini tablolamak ve tablodan okutmaktr. Pekala, ncelikli iimiz sins hesaplatmak. Bunun iin geen sayda da yaptmz gibi eitli metotlar kullanabiliriz.

Amacmz Commodore 64'n karakter ekrannn en st satrnda bir karakteri sins hareketiyle saa sola sallamak. Bir satr 40 karakter olduuna gre bizim 0-39 arasnda deien deerlerde bir sins tablosuna ihtiyacmz var. imdi JavaScript kullanarak bu aralkta deerler hesaplatan bir forml bulalm.

[b]sinus.htm[/b]
[code]<script>
for(i = 0; i < 256; i++)
{
	a = 20 + Math.floor(19.9 * Math.sin(i / 64 * Math.PI));
	if(i != 0)
		document.write(",");
	document.write(a);
}
</script>[/code]
Bu rnek taraycmzn ekranna;

20,20,21,22,23,24,25,26,27,28,29,.......................,7,8,8,9,10,11,12,13,14,15,16,17,18,19

eklinde tam 256 adet say basar. imdi sins hareketini oluturacak minik programmz yazalm ve internet taraycsnn ekranndaki blm programmzn sonuna kopyala&yaptr yapalm.

[b]sinus.a[/b]
[code]        !to "sinus.prg"

        * = $0801
        !byte $0c, $08, $00, $00, $9e, $32, $30, $36, $31, $00, $00, $00

        * = $080d
loop    jsr $e544
sinpos  ldx sinus
        lda #$51
        sta $0400,x
        inc sinpos+1
        jmp loop

        * = $0900
sinus   !byte @Sinus deerlerini buraya kopyala & yaptr[/code]
[img = CTR data/articles/test_platformu/sinus.gif]"sinus.htm" dosyasnn ktsn "sinus.a" kaynak kodunda kullanarak sinus hareketi yapan bir ASCII karaktere sahip olmu olduk. Bylelikle geen saynn bandan beri anlatmak istediimiz noktada ilk amacmza ulatk.

Bu rnekte kullanlan "jsr $e544" ekran temizlemeye yarar. Bunun haricinde sins tablosu bilinli olarak $0900 gibi $100'lk dilime denk gelen bir adrese yerletirildi. Bu sayede "ldx sinus" komutunun iaret ettii "sinus" etiketinin yer ald adresin alt byte' arttrlarak (inc sinpos+1) tablo zerinde ilerlemek mmkn oluyor. $09FF adresinden sonra ise alt byte $00'a dnd iin iaret de $0900 adresine dnyor. Sins peryodu doru ayarlandnda tekrar eden bir fonksiyon olduu iin harekette bir atlama olmuyor ve dzgn bir ekilde baa dnyor. "lda #$51" satrndaki $51 deeri deitirilerek de farkl ASCII karakterlerini ekranda sallamak mmkndr.

Bu blmde ilk asli hedefimize ulatk ve PC'nin imkanlarn kullanarak Commodore 64 zerinde en basitinden bir efekt hazrlamay baardk. nmzdeki blmden itibaren bu tr rnekleri gittike gelitirirken, bir taraftan da "programlar ncelikle PC'de test etmek" konusuna deineceiz.

Bu blmn de sonuna geldik. Eer gerekten bu dkmann iinize yaradna inanyorsanz, gelecek Plazma saysna kadar bol bol pratik yapn, genel olarak makine dili aln. Gelecek sayda kaldmz yerden devam edeceiz. Hoakaln.

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]