Bu sayfadaki yazılar
Sayfanın metni
Sayfa 45
aşağıdaki satır gelecektir: *6000 RUN/STOP'a bastıktan sonra noktaların yeraldığı satırın başına gi- din istediğiniz metni yazın. *6000 MERHABA .... Metnin sonuna RETURN tuşunun ASCİ kodu olan desimal 13 ve $0D'nin yazılması ekran görünümü açısından her zaman için yararlıdır. Ayrıca yazdırmak istediğimiz metnin sonunda bir de BRK komutu yeral- malıdır. Bunun için monitör progra- mında iken “M 6006” satırın girip is- tediğiniz değerleri yazabilirsiniz. Şim- di asıl Assembler programa geçelim. Programımız $601C'den başlayacağı için “A 601C”' satırını yazın ve aşa- ğıdaki satırları girin. 601CLDY $00 601E LDA $6000, Y 6021 BEO $602C Burada yapılan iş asılnda oldukça basittir: Metnimizin yazılı olduğu ha- fıza bölgesindeki baytlar teker teker okunup akümülatöre yüklenir. Bu iş- lem BEO komutuyla kontrol edilir ve metnin sonu gelinceye kadar (BRK - $00) tekrarlanır. Burada Y-Registeri indeks olarak seçilmiştir ve programın bundan son- raki bölümünde döngü içerisinde de- ğeri bir arttırılacaktır. 6023 JSR $FFD2 6026 BCS $602D Daha önce belirttiğimiz gibi kernal rutini kullanılırken ortaya herhangi bir hata çıkarsa Carry Bit'i “1”” de- ğerini alır. BCS komutunun yukarı- da kullanılmasının nedenide budur. 602D adresinde BRK komutu bulu- nacaktır. 6028 INY 6029 JMP $601E 602C RTS 602D BRK Aslında burada G 601C ile prog- ramı çalıştırabiliriz, fakat bu sefer farklı bir yöntem kullanacağız. Bu-
nun için öncelikle X ile monitör programını terk edin. Ardından aşağıdaki üç satırlık Basic programı yazın. “Out Of Memory Error” mesajı ile karşılaştığınızda NEW yazarak hafızayı temizlemelisiniz. 10 PRINT CHR$ (147) 20 SYS 24604 : REM 24604 — $601C 30 END RUN yazdığınızda $601C adresinden başlayan makine dili programımızın işleyişini gözleyebilirsiniz. Bu yaptığımız $FFD2'deki CHROUT rutini ile yapılabileceklerden sadece biridir. CHROUT'un çıkışı yaptığı kanal ekrandır ve numarası 3'dür. Eğer çıkış yapılacak kanal numarasını değiştirirsek CHKOUT rutini ile yazıcıdan da çıktı alabiliriz. Yalnız bu iş için CHKOUT ve OPEN rutinlerini öğrenmeliyiz.
İsim: CHKOUT Amaç: Çıkış kanalının belirtilmesi Adres: $FFC9, desimal 65481 Hazırlık: X-Registerine dosya numarası verilir. Hata: Akümülatör, X-Register
Değer | Mesaj Anlam 0 BREAK RUN/STOP basılmış 1 TOO MANY FILES En fazla 10 dosya açılabilir 2 FILE OPEN Açılmış bir dosya tekrar açılamaz 3 FILE NOT OPEN Dosya açılmamış 4 FILE NOT FOUND Dosya bulunamadı 5 DEVICE NOT PRESENT Cihaz hazır değil 6 NOT INPUT FILE Bu dosyadan veri okunamaz 7 NOT OUTPUT FILE Dosya yazılamaz 8 MISSING FILENAME Dosya ismi eksik 9 ILLEGAL DEVICE NUMBER Yanlış cihaz numarası Resim 1
Register: Akümülatör, X-Register
Daha önce OPEN ile belirtilmiş her kanal bu rutin kullanılarak çıkış için kullanılabilir. Yalnız burada kullanılacak kanal çıkış yapmaya uygun olmalıdır, aksi takdirde bilgisayar hata mesajı verir. Ayrıca CHKOUT kullanılmadan önce muhakkak OPEN kullanılmalıdır.
İsim: OPEN Amaç: Bir dosyanın açılması Adres: $FFC0, desimal 65472 Hazırlık: SETLFS, SETNAM Hata: 1, 2, 4, 5, 6 Register: Akümülatör, X-Register
Bu rutin kullanımı için sadece JSR $FFC0 satırı yeterlidir. Yalnız bundan önce SETNAM ile dosya adı ve SETLFS ile açılacak dosya kanalı belirtilmiş olmalıdır. Şimdi bu iki rutini
İsim: SETLF Amaç: OPE belirtilmesi Adres: $FFBA, desimal 65466 Hazırlık: Dosya numarası akümülatöre, kanal numarası X-registerine, ikincil adres Y-registerine yüklenir. Hata: Yok Register: Yok için çıkış kanalının
SETLFS ile OPEN rutininde kullanılacak cihazın numarası ve ikincil adresi bilgisayara bildirilir. Cihaz numarası 0 ile 31 arası herhangi bir sayı olabilir, ancak C-64'de sadece aşağıdakiler mevcuttur.
0.... Klavye 1.... Datasette 2.... RS232C-Kanalı
45
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 44
Kursumuzun şu ana kadar olan 8 bölümünde C-64'ün kullandığı 6510 makine dilinin hemen hemen tüm komutlarını ele aldık. Bu sayıda ise öğrendiğimiz bu komutların ışığında bilgisayarımızın işletim sistemindeki (kernal) rutinlerin kullanımını incelemeye başlayacağız. Eğer makine dili ile biraz ilgilenmişseniz $FFD2 kernal rutinini büyük bir ihtimalle duymuşsunuzdur. “CHROUT” diye adlandırılan bu rutin kısaca ekrana yazı yazdırmaya yarar, fakat tüm işlevi sadece bu kadar değildir. Kernal rutinlerinin birçoğu çok yönlü kullanılmak üzere tasarlanmışlardır. Genelde bir kernal rutininin kullanımı şu üç adımda gerçekleşir. 1. Gerekli değerler akümülatöre veya uygun registere yüklenir. 2. Rutin çağrılır. 3. Hata sorulur ve önlem alınır. Şimdi sırayla bunları ele alalım. Bazı rutinler için gerekli informasyonlar ancak bazı diğer gerekli rutinlerin çağrılmasıyla elde edilebilir.
Anıl Gül
Bit'i “1” değerini almış olur. Bu nedenle Carry Bit'ini inceleyerek ortaya çıkan bir hata hakkında bilgi sahibi olabilir ve gerekli önlemleri alabilirsiniz. Bu gibi durumlarda akümülatörde hatanın türünü belirten bir sayı yer alır. Görüldüğü gibi makine dilinde hata mesajları Basic'de olduğu gibi doğrudan doğruya ekrana gelmez. Resim 1'de hata numaraları ve bunlara karşılık gelen mesajlar yer almaktadır. Hangi rutinde hangi hata mesajı ile karşılaşabilineceği her seferinde belirtilecektir. Şimdi tekrar $FFD2'deki rutinimize dönelim. Bu rutini kısaca şu şekilde özetleyebiliriz:
İsim: CHROUT Amaç: Bir harfin dışarı verilmesi Adresi: $FFD2 veya desimal 65490 Hazırlık: (CHKOUT, OPEN) Akümülatördeki harf Hata: 0 Register: Akümülatör
Eğer bu rutini daha önce kullan-
mışsanız büyük bir ihtimalle CHKO-
Eğer bu diğer alt programlar çağrılğ UT ve OPEN hazırlıklarını yapmamazsa istenen rutin çalışmaz.
rutin Y-Registerinde bir değer istiyorsa bu değer kesinlikle orada olmalıdır. Aksi takdirde rutin yine istenen işi yapmaz. Kursumuzda yeralacak tüm rutinler için gerekli açıklamalar yapılacaktır. İstenen rutinin çağrımı kesin suretle JSR komutu ile gerçekleşir. Bilgisayarımızın ROM'unda yeralan rutinlerdeki son komut RTS'dir. Bu şekilde rutindeki komutlar sırayla yorumlandıktan sonra ana programa geri dönüş sağlanmış olur. Eğer rutinler işlerken bir hata ortaya çıkarsa rutinden geri dönüldüğünde Carry mışsınızdır. Bu hazırlıklar yapılmadan rutinin çalışmayacağını daha önce belirtmiştik. Burada ise bilgisayarımız ekranı, çıkış kanalı olarak daha önce belirttiği için OPEN rutinine gereksinim duymuyoruz. Şimdi inceleyeceğimiz bir örnekte yukarıda anlatılanları uygulayacağız. Öncelikle Ex-mon'u veya sahip olduğunuz başka bir monitör programını yükleyin. Şimdi hafızanın uygun bir köşesine istediğimiz metni yazmalıyız. Ex-mon'da bu işlem şu şekilde gerçekleşir. K 6000 komutunu girin. Ekrana