TURBO ASSEMBLER

TURBO ASSEMBLER C64'te assembler program yazan (intro, demo, utility vs.) birçok kişinin kullandığı bir programdır. Birkaç versiyonu olmakla birlikte genelde aralarında fazla fark yoktur. Benim kullandığım 5.4b versiyonudur. TURBO ASSEMBLER'i bundan sonra TASS olarak adlandıracağım. TASS yüklendiğinde $9000 (36864) adresinden itibaren çalışmaya başlar. Herhangi bir nedenle programdan çıkarsanız RESTORE tuşu ile veya SYS 36864 komutu ile TASS tekrar çalışmaya başlar. Eğer bir aksilik yoksa yazdıklarınız karşınızda duracaktır. TASS ile birçok işi yapabilirsiniz. Birazdan TASS komutlarını yazacağım. Ama gözünüzü korkutmasın. Zaten kullanacağınız komutlar fazla olmayacaktır. Başlıyoruz... Bir program yazmaya başlamadan önce MUTLAKA programın hangi adresten başlayacağını belirtmeniz lazım. Bunun için kullanacağınız komut şöyledir. *=$.... ( ÇARPI, EŞİTTİR, DOLAR İŞARETİ, HEX ADRES) Eğer HEX yerine DECIMAL adres kullanmak isterseniz dolar işaretine gerek yoktur. Program içinde birden fazla olarak bu komutu kullanabilirsiniz. Ayrıca 8 karaktere kadar etiket kullanabilirsiniz ama bazı kuralları vardır. 1 – Etiketler bir ASSEMBLER komutu olmamalıdır. 2 – Etiketler bir rakam ile başlayamaz. 3 – Etiketlerde BOŞLUK karakteri ve diğer noktalama işaretleri kullanılamaz. 4 – Etiketlerde SADECE RAKAM ve HARF kullanabilirsiniz. TASS ile önceden tanımlanmış Fonksiyon tuşlarını kullanabilirsiniz. Bu tuşların görevleri şunlardır.

F1 : Uzun bir programda 20 satır yukarı gidersiniz. F2 : Uzun bir programda en üst satıra yani programın en başına gidersiniz. F3 : .text komutunu ekrana yazar. Komuttan sonra tırnak içerisinde satırdan taşmayacak şekilde bir yazı yazabilirsiniz. Eğer yazınız taşıyorsa bir alt satırda .text komutunu tekrar kullanmalısınız.

F4 : Programınızda bir hata yoksa TASS programınızı koda çevirir ve çalıştırır. Eğer hata varsa hatanın hangi satırlarda olduğunu, hatanın cinsini ve kaç tane hata olduğunu ekrana yazar.

F5 : .byte komutunu ekrana yazar. Komuttan sonra 255'e kadar olan sayıları bir satırdan taşmayacak şekilde, $ kullanarak HEX sayıları ve % işareti ile BINARY sayıları, işaret kullanmadan onlu sayıları kullanabilirsiniz. Eğer satırdan taşma oluyorsa bir alt satırda .byte komutunu tekrar kullanmalısınız. Sayılar arasında virgül kullanmanız gerekmektedir.

F6 : İmlecin bulunduğu satırı siler. Silme işleminden hemen sonra eğer başka bir tuşa basmadıysanız RESTORE tuşu ile satırı geri getirebilirsiniz.

F7 : Uzun bir programda 20 satır aşağı gidersiniz. F8 : Uzun bir programda en alt satıra yani programın en sonuna gidersiniz. Diğer komutlara geçmeden önce bir komut daha var ki Fonksiyon tuşlarıyla tanımlanmamıştır. Bu komut .word komutudur. Yaptığı iş komuttan sonra gelen bir sayıyı – en fazla 65535'tir – LO bayt / HI bayt formatında hafızaya saklamaktır. Mesela .word $0801 ile bu sayıyı hafızaya $01 - $08 şeklinde saklarsınız. Zaten bütün mikroişlemciler iki baytlık sayıları bu şekilde kullanır. Diğer komutlar : Bu komutlar ile TASS ile çeşitli işlemler yapabilirsiniz. Komutları kullanabilmek için önce “Í” (SOL OK) tuşuna sonra diğer tuşa basmanız lazımdır. Í + 1 : TASS'tan çıkış. RESTORE tuşu ile tekrar TASS'a dönebilirsiniz. Í + 2 : İmlecin olduğu satıra yatay çizgi koyarsınız. Ayırıcı çizgi misali. Í + 3 : Yazdığınız programı koda çevirir. Hata varsa bildirir, hata yoksa programı çalıştırmak için

“S” tuşuna, editöre geri dönmek için başka bir tuşa basmanızı bekler. Í + 4 : PRINT FILE (Diskete farklı bir kayıt yapıyor henüz çözemedim.)

Í + 5 : OBJECT FILE Yazdığınız programı kod olarak diskete kaydeder. Í + 6 : $... 'dan $... 'a olan bölgedeki baytları, imlecin bulunduğu yere .byte komutu şeklinde programınıza ekler. Bir tür DATA GENERATOR yani. Í + 7 : Tanımsız. Í + 8 : Tanımsız. Í + 9 : Tanımsız. Í + 0 : Tanımsız. Í + ”+” : HEX sistemde toplama yapar. Í + “-“ : HEX sistemde çıkartma yapar. Í + pound işareti : Tanımsız. Í + “INST/DEL” : Satır siler. Í + “A” : Tanımsız. Í + “B” : Önceden Í + “M” ile tanımlanmış bir blok üzerinde işlem yapar. “W” tuşu ile seçilen bloku diskete SEQ file olarak kaydeder. “K” tuşu ile seçilen bloku siler. “C” tuşu ile seçilen blok imlecin olduğu satırdan itibaren kopyalanır. Í + “C” : COLD START. “Y” ile her şey silinir ve TASS'ı yeniden başlatır.. Í + “D” : Disk komutları kullanabilirsiniz. “I” : INIT, “V” : VALIDATE vs.. Í + “E” : Daha önceden Í + “W” ile diskete SEQ File olarak kaydedilmiş bir programı imlecin olduğu satırdan itibaren araya ekler. Í + “F” : Programda bir yazıyı vs. aratabilirsiniz. İmlecin bulunduğu ilk yere gider. Í + “G” : Daha önceden Í + “M” ile numara verilerek tanımlanmış blok'a gider. Blok

Numarası girilir.  + “H” : Programdaki en alt satıra gider.  + “I” : $.... ‘dan $.... ‘a kadar olan bölgeyi $.. sayısı ile doldurur.  + “J” : $.... ‘dan $.... ‘a kadar olan bölgenin HEX ve ASCII dökümünü verir.  + “K” : F3, F4, F5 ve F6 tuşları tanımlanabilir.  + “L” : Önceden  + “S” ile diskete PRG file olarak kaydedilmiş programı yükler.  + “N” : Programdaki herhangi bir satıra gidebilirsiniz.  + “O” : Programın renklerini değiştirebilirsiniz.  + “P” : EOR CODE --- Ne işe yaradığını çözemedim.  + “Q” : Tanımsız.  + “R” : REPLACE --- Ne işe yaradığını çözemedim.  + “S” : Yazdığınız programı –EKRANDA YAZILDIĞI ŞEKLİYLE – PRG File olarak diskete kaydeder. “ + “5” : OBJECT FILE “ komutundan farklıdır.  + “T” : En alt satıra gider.  + “U” : Programda kullandığınız etiketleri “,” adıyla diskete kaydeder.  + “V” : --- Ne işe yaradığını çözemedim.  + “W” : Programı SEQ File olarak diskete kaydeder.  + “X” : Tanımsız.  + “Y” : En alt satıra gider.  + “Z” : Tanımsız.  + “*” : Disketin Directory’sini okur.  + “:” : İşaretlenen yerleri listeler.  + “;” : İşaretleri kaldırır.  + “=” : İmlecin bir üstündeki satırı siler.  + “@” : Disket sürücünün hata kanalını okur.  + “F1” : Fonksiyon tuşlarını sıfırlar.  + “F3” : Tanımsız.  + “F5” : Tanımsız.  + “F7” : Tanımsız. Son olarak program içinde yapacağınız açıklamalar “;” ile başlamalıdır. Örnekler için tıklayınız ☺☺

DİKKAT : TASS kullanırken dikkat edeceğiniz önemli bir konu var. Yazacağınız programın kodlarının TASS'ın bulunduğu adreslere yerleşmemesi gerekir. Yoksa TASS sapıtır. Zaten çalışma sırasında ekranın en altında devamlı değişen bir adres göreceksiniz. Bu adres siz bir şeyler yazdıkça devamlı azalacaktır. Kısaca TASS ile çakışmayacak adreslerin hepsini kullanabilirsiniz. Ama benden tavsiye her zaman $0900'den itibaren yazmaya başlayın. Bazen bilgisayarı resetlemek durumunda kalabilirsiniz. Bu nedenle daha düşük adreslerdeki programlara – aslında $0800'ün altında fazla bir yer yok – elveda diyebilirsiniz. Eğer resetledikten sonra SYS 36864 komutuyla TASS'ı tekrar çalıştırırsanız bir aksilik yoksa programınız karşınızda duruyor olacaktır. Adresleri kontrol etmeniz gerekir. NOT : Yazacağınız programda kullanacağınız SAYAC, GEÇİCİ SAKLAMA ADRESİ, TABLO, YAZI gibi hafıza kullanan bölümleri programınızın en sonuna yazarsanız daha iyi olur.

ÖRNEK 1 : 
*=$0900 
BASLA 
LDA #<YAZI  
; Yazının alçak baytı aküye 
LDY #>YAZI  
; yüksek baytı Y registerine koy. 
JSR YAZ 
; Rom’daki alt rutini çağır. 
RTS 
; Programdan çık. 
YAZ 
=$AB1E 
YAZI  
.TEXT “DENEME” 
.BYTE 0 
Yukarıdaki örnekte programın başlangıcı olarak $0900 = 2304 yazıyoruz. Sonra arka arkaya iki 
komutla yazımızın bulunduğu yerin adreslerini belirliyoruz. Daha sonra ROM’da bulunan ekrana yazı 
yazdıran alt rutini çağırıyoruz. En sonunda ise RTS komutuyla programımızı bitiriyoruz. 
İsterseniz JSR YAZI yerine doğrudan JSR $AB1E yazabilirsiniz. Ayrıca dikkat etmeniz gereken bazı 
konular vardır. ROM’daki bir alt rutini çağırırken hangi registerler kullanılır, sonuç hangi registerde 
veya hangi adreslerde tutulur vs. $AB1E adresine sıçramadan önce A registerine yazının bulunduğu 
adresin LOW BAYT’ı  Y registerine ise HIGH BAYT’ı yüklenmelidir. Son olarak ta yazının 
bitişinden hemen sonraki adrese mutlaka  0  değeri yazılmalıdır. Yoksa alt rutin yazının bittiğini 
anlayamaz ve ekrana garip yazılar çıkabilir. Örneği inceleyin.
ÖRNEK 2 : 
ÖRNEK 3 : 
*=$0900 
*=$0800 
LDA #(TAB/64)                                                
.BYTE 0 
STA SPRPNT  
.WORD END 
RTS 
.WORD 2002 
.BYTE $9E,$20 
SPRPNT 
=$07F8 
.TEXT “2068 HADES” 
TAB 
=$02C0 
.BYTE 0 
END 
.BYTE 0,0 
PRG 
INC $D020 
JMP PRG 
İkinci örneğimizde birazcık matematik yaptık. C64’ün özelliklerinden biri olan SPRITE ile ilgili çok 
ufak bir deneme olan bu örnekte 1. sprite için Sprıte’ın datalarının bulunduğu hafıza adresi olarak 
$02C0’ı tanımladık ve sonra bu değeri 64’e bölerek sprite pointerine yazdık. Bunu yapınca VIC çipi 
artık 1. sprite’ın şeklinin nerede olduğunu bilecektir. Meraklanmayın BELLEK HARİTASI 
bölümünde sırası gelince SPRITE’larla ilgili bütün bilgileri vereceğim. 
3. örnektekileri yazın fakat çalıştırmayın. Sadece Í + “ 3” komutunu kullanın. Sonra Í +  “ 1” ile 
TASS’tan çıkın. LIST komutunu verin. Ekranda ne görüyorsunuz ? 
2002 SYS 2068 HADES   satırı değil mi ? Şimdi RUN komutu verin. Programın açıklamasını artık 
yapabilirsiniz. Zaten TASS’ı kullandıkça daha karmaşık programlar yazabileceksiniz. 
TURBOASSEMBLER dersi burada bitti. Eğer eksik ve/veya hatalı yerler varsa bana bildirin. Bir 
sonraki sayıda düzeltmeler bölümü açıp oraya ekleyelim.... Herkese şimdiden kolay gelsin.....