C64 ASM V1.1

Assemblerin biri bitiyor diğeri başlıyor değil mi? 12 sayfalık bir bölümden sonra bilmem kaç sayfalık C64ASM bölümüne başlıyoruz. Korkmanıza gerek yok, sayı sistemlerini komutları vs. yeniden anlatmayacağım. C64ASM PC’de 6510 assembler komutlarını kullanarak program yazmamıza yarayan yardımcı programlardan biri. Eğer PC’nizde VICE gibi bir emülatör programınız varsa C64ASM ile elde ettiğiniz .PRG uzantılı dosyayı hemen çalıştırabilirsiniz. C64ASM programı gerçekten çok kullanışlı bir programdır. Ben artık bu programı kullanıyorum. En güzel tarafı C64’ün hafızası tamamen kullanıma açık olmasıdır. Yani emülatör ile mesela TURBOASSEMBLER kullanınca karşınıza çıkan hafıza sınırlaması –TASM ile $C000’dan başlayan bir program yazamazsınız- C64ASM’de yoktur. Bu programın gerçekten güzel özellikleri vardır ama her güzelin bir kusuru bulunur dedikleri gibi bu programın kusuru da MS-DOS KOMUT İSTEMİ’nden çalıştırılıyor olmasıdır. İnternette o kadar aradığım halde Windows altında çalışan bir C64ASSEMBLER EDİTOR programı bulamadım. Bir program yazmak için size gerekli olan WORDPAD programıdır. WORDPAD ile yazdığınız programı .asm uzantılı olarak mutlaka C64ASM programının olduğu klasöre kaydedin. Bu klasörün masaüstünde olmasını tavsiye ederim. Sonra ise BAŞLAT Æ PROGRAMLAR Æ MSDOS KOMUT İSTEMİ’ni çalıştırın. Daha sonra komut satırından CD DESKTOP Æ CD klasörünadı ÆC64ASM programınadı yazarak programınız derlenir ve size default olarak programadı.PRG olarak bir c64 file üretilir. DİKKAT : programın adı en fazla 8 karakter olabilir. (MS DOS zamanlarından kalma bir sınrlama // )

Programın 1.1 versiyonunu www.students.itu.edu.tr/~celikdeni/c64asm.zip adresinde bulabilirsiniz. Programın yazarı Balint Toth isimli bir Macar’dır. Lafı fazla uzatmadan C64ASM1.1 klasöründe bulunan C64ASM.EXE programının özelliklerini ve kullanılışını anlatmaya başlayabiliriz. Program SHAREWARE’dir.

C64ASM’ün kendisi DOS’ta çalışır ve COMMODORE 64’ün makine dilinde dosyalar oluşturur. C64ASM, program içinde kullanılan etiketleri, sembolik sabitleri, matematiksel ifadeleri, dosya eklemeyi destekler ve gerekirse ayrıntılı rapor yaratabilir. PRG, T64 ve P00 uzantılı dosya tiplerini C64ASM ile kullanbilirsiniz. Komutun kullanım şekli aşağıdaki gibidir. Köşeli parantezlerin içindekilerinin kullanılması zorunlu değildir.

C64ASM kaynakdosyaadı[.asm] [çıkışdosyaadı[.prg]] [opsiyonlar] Kaynakdosyaadı : WORD ile yazmış olduğunuz ve .ASM uzantılı olarak kaydettiğiniz dosyanın adı. Çıkışdosyaadı : C64ASM ile oluşan dosyanın adını ve dosya tipini burada tanımlayabilirsiniz. Default olarak tanımlanan çıkış dosya tipi .PRG’dir ve bunu .T64 veya .P00 olarak değiştirebilirsiniz. Opsiyonlar : /S : Rapor dosyasına sembol tablosu yazılır. /L : Rapor dosyasına derleme tablosu yazılır. /T : Rapor dosyasına özet yazılır. /R = Rapordosyasıadı [.rep] : Rapor dosyası adı için başka bir isim verilebilir. /6 : Çıkış dosyası tipi olarak her zaman T64 kullanmak için kullanılır. /0 : Çıkış dosyası tipi olarak her zaman P00 kullanmak için kullanılır.

ÖRNEK : C64ASM main /SLT komutuyla main.asm isimli programınız main.prg olarak derlenir ve maksimum ayrıntılı olarak main.rep dosyası oluşturulur. Eğer ayrıntılarla ilgilenmiyorsanız sadece C64ASM programadı komutu işinizi görür. Program 6510’un standart komutlarını ve adresleme modlarını desteklemektedir. Derleyici küçük / büyük harf ayrımına duyarsızdır. Yani programda küçük ve büyük harfleri karışık kullanabilirsiniz. Program yazarken her satırda mutlaka komut olacak diye bir kural yoktur. “ ; “ (noktalı virgül) ile başlayan satırlar ve açıklamalar derleyici tarafından dikkate alınmaz.

Temel yazım şekli aşağıdaki gibidir. Köşeli parantezlerin içindekilerinin kullanılması zorunlu değildir.

[ETİKET] KOMUT [PARAMETRE] [; AÇIKLAMA] Parametrenin olup olmaması komuta bağlıdır. Şimdi bunları sırayla açıklayalım. ETİKET : Etiket bir bellek adresinin sembolik adıdır. Ayrıca global ve local değişkenler de etiket kullanarak tanımlanabilir. Eğer isterseniz “_” (altçizgi) karakterini de kullanabilirsiniz.

ÖRNEKLER 
   -1- 
     -2-  
     -3-  
-4- 
...........  
............  
............. 
lda #<_yazı 
tekrar inc $fb  
inc renk 
lda sayı 
ldy #>_yazı 
bne tekrar 
............  
............. 
jsr print 
........... 
renk 
=$d020 
sayı 
.byte $30 
_yazı .text “c64 türkiye” 
print 
=$ab1e 
1. örnekte “tekrar” etiketi programda döngü amacıyla kullanılmıştır. Derleme sonunda bulunan değer 
BNE komutunun parametresi olur.  
2. örnekte ise “renk” etiketi $d020 adresinin yerine kullanılmıştır ve global bir değişken olarak 
tanımlanmıştır. Derleme sırasında program içinde yer alan ve “renk” ifadesinin kullanıldığı her komuttan 
sonra $20 ve $d0 değerleri yerleştirilir. 
3. örnekte “sayı” etiketi programda bulunduğu adreste default olarak $30 değerine sahip bir değişken 
olarak tanımlanmıştır. 
4. örnekte ise altçizgili bir kullanıma örnek olarak verilmiştir. “c64 türkiye” yazısının hafızadaki adresini 
göstermektedir.

Etiket kullanmanın faydası şudur. Program içinde bir kez tanımladıktan sonra, programda herhangi bir ekleme veya çıkarma yapsanız bile programın çalışması değişmeyecektir. Ayrıca isimleri hatırlamak sayıları hatırlamaktan daha kolaydır. KOMUT : Yazdığınız programda kullanacağınız makine dili komutları “LDA”, “NOP” gibi 6510 komutları veya C64ASM’ye ait olan ve “.” (nokta) ile başlayan özel komutlar olabilir. PARAMETRE : Parametre olarak komuta ait herhangi bir adresleme modu olabilir. LDA adres,X gibi. Veya daha sonra bahsedeceğimiz çeşitli aritmetiksel ifadeler olabilir. Sayı kullanılacaksa bu sayı Binary, Hexadecimal veya Decimal olabilir. AÇIKLAMA: Açıklama olarak programın o kısmında ne yaptığınızı veya o komutu niçin kullandığınızı yazabilirsiniz. Daha sonra programda düzenlemeler yapmak istediğinizde ben bu komutu niye kullanmışım veya burada ne yapmışım gibi sorulara cevap olarak açıklamaları okuyabilirsiniz.

MATEMATİKSEL İFADELER C64ASM derleyicisi için aşağıdaki matematiksel işlemleri yazacağınız programlarda kullanabilirsiniz. İSİM : Sembolik bir sabitin, değişkenin veya etiketin değeri programda kullanılır. SAYI : 0 ila 65535 arasında bir onlu sayı (0 ve 65535 dahildir) $SAYI : 0 ila $FFFF arasında bir Hex sayı %SAYI : İkili sistemde bir sayı (max. %11111111) “CHAR” : Herhangi bir ASCII karakter ‘CHAR’ : Karakter COMMODORE PETSCII olarak çevrilir.

* : (Çarpı işareti) Program Counter’in o anki değeri.Bu komutla programın başlangıç adresini tanımlarsınız. Bu komutu isterseniz birden fazla kullanabilirsiniz. Daha iyi anlaşılması için aşağıdaki örneklere bakabilirsiniz. * = $0900 ; Programın başlangıç adresi olarak $0900 adresi tanımlanmıştır. * = 49152 ; “ “ “ “ 49152 “ “ JMP * ; Bu komutla bilgisayar sonsuz döngüye girer * = $1000 ; Programın başlangıç adresi $1000 (4096) LDA TABLO ; Komut .......................... ; Komut .......................... ; Komut * = $4000 ; Tablonun başlangıç adresi $4000 (16384) TABLO .BYTE 0,1,12,33 .byte 109,22,4,59 Aşağıdaki işlemler program yazarken sık sık kullanacağınız işlemlerdir. < ; İki baytlık bir değişkenin değerinin veya bir tablonun, yazının bulunduğu adresin veya program içindeki bir yerin alçak baytı. > ; Yukarıdaki açıklamanın yüksek baytı için olan şekli.

ÖRNEK 1: 
ÖRNEK 2: 
ÖRNEK 3: 
sei 
lda 
#<yazı  
lda 
#<tablo 
lda 
#<irq  
ldy 
#>yazı  
ldx 
#>tablo 
ldx 
#>irq  
jsr 
$ab1e  
sta 
store 
sta 
$0314  
........................  
stx 
store+1 
stx 
$0315  
........................  
......................... 
cli 
........................  
jmp 
* 
rts 
irq 
inc 
$d019  
yazı 
.text 
“c64”  
tablo =$3800 
lda 
$d012  
.byte 
0 
store 
.byte 
0, 0 
.......................  
.......................  
........................

Şimdi sırayla örnekleri açıklayalım: İlk örnekte “irq” etiketiyle başlayan program bölümünün adresinin “alçak” baytı “lda #<irq” komutuyla okunuyor ve “sta $0314” komutuyla ilgili adrese yazılıyor. Aynı şekilde “irq” ‘nın yüksek baytı için ldx ve stx komutları kullanılıyor. İkinci örnekte benzer bir şekilde “c64” yazısı için yapılıyor fakat bir “jsr” komutu için kullanılıyor. Son örnek biraz farklıdır. Bu sefer “tablo” ‘nun adresi değil, tablonun değeri olarak tanımlanan bir sayı A ve X registerleri tarafından LOW-HIGH bayt şeklinde okunup (A=$00 ve X=$38’dir) “store” nin olduğu adreslere kopyalanıyor. Program yazarken bu şekildeki yazım şekillerini sık sık kullanacaksınız. + ; Toplama işlemi - ; Çıkarma işlemi * ; Çarpma işlemi / ; Bölme işlemi ÖZEL KOMUTLAR : Bu bölümde assembler komutları olmayan bazı özel komutları açıklayacağım. .BYTE : (BYTE LİSTESİ) Bu komut ile program içinde kullanacağız değişkenler için gerekli değerleri tanımlayabilirsiniz.

.WORD : .BYTE komutu gibidir. Fakat tanımlanan değer hafızada LOW BYTE - HIGH BYTE olarak saklanır. .ASC “DİZİ” : Tırnak içinde verilen ifadenin karakterlerinin ASCII kodları hafızaya yerleştirilir. .TEXT “DİZİ”: .ASC komutu gibidir, fakat karakterlerin kodu CBM-ASCII’ye çevrilir. .SCRL “DİZİ” : .TEXT komutu gibidir, fakat karakterlerin kodu “küçük harf / büyük harf ” karakter seti kullanıldığı zamanki C64 ekran koduna çevrilir. .SCRU “DİZİ” : .SCRL komutu gibidir, fakat karakterlerin kodu “büyük harf / grafik “ karakter seti kullanıldığı zamanki C64 ekran koduna çevrilir. Birazdan açıklayacağım komutların çok işinize yarayacağından eminim. .INCLUDE asmdosyası : Daha önce yazmış olduğunuz .ASM uzantılı dosyaları bu komut ile yazmakta olduğunuz programa dahil edebilirsiniz. Fakat bir şeye dikkat edin. .INCLUDE komutuyla yüklediğiniz dosya ile yazmakta olduğunuz programda aynı isimlerin OLMAMASI gerekir. Mesela yazmakta olduğunuz programda TEMP isimli bir etiket olsun. Eğer yüklediğiniz dosyada da TEMP varsa C64ASM derleme sırasında hata verecektir. Ayrıca .INCLUDE ettiğiniz dosyaların yazmakta olduğunuz programdaki yerlerine dikkat etmeniz gerekmektedir. .INCBIN dosyaadı : Bu komut ile daha önceden derlenerek oluşturulmuş olan bir PRG, T64 veya P00 uzantılı bir dosya, program derlenirken eklenir. .END : Bu komut ise yazdığınız programın sona erdiğini C64ASM programına bildirir. Buraya kadar açıkladğım komutların haricinde yazmamış olduğum komutlar ve aritmetiksel işlemler bulunmaktadır. Eğer ingilizce biliyorsanız programı internetten indirip, klasörde bulunan c64asm.doc isimli dosyayı okuyabilirsiniz. Bu sayının program köşesindeki program C64ASM ile yazılmıştır.