Her İşin Başı Çekirdek
Seyfettin ÇANKAYA — larının çoğunun, çok az bir değişiklikle türünde kullanılabilir olmasıdır.
Kernal Rutinleri Ne
İşe Yarar?
Kernal tanıtılırken bir işletim sistemin en temel işlevlerini yerine getirir demiştik. Bu işlevler tüm sistemin ilk açılışından kapanışına kadarki sürede kontrolü sağlamak; Disk Drive, Dataset, Printer, Klavye, Video devresi ve RS-232 portuna bilgi gönderme, bilgi alma gibi işlemlerdir. Bütün bu işlevler sözünü ettiğimiz Kernal rutinleri ile belirlenmiştir. Bu yazı dizisinde tüm Kernal rutinlerini inceleyeceğiz ve bu rutinler yardımıyla çalışan makine dili kullanılarak yazılan programlardan örnekler vereceğiz. Bu nedenle temel makine dili bilgisi gerekeceğinden, dergide çıkan bu konuya ilişkin yazıları incelemenizi öneririz.
C-64 Power-On
Kernal İşbaşında!..
C-64 ilk açıldığında ne olur dersiniz? Bunu Kernal içindeki bilgilerden öğrenelim. Kernal hexadecimal olarak $E000-$FFFF aralığında yer alır. Bunun nedeni C-64'ün işlemcisi olan 6510'un ilk çalışma adresini $FFFC'deki bellekten alıyor olmasıdır. Şimdi bu adreste ne var öğrenelim.
$FFFC — 65532 olduğunu hatırlayarak
PRINT PEEK 256* PEEK(65533)
Sonuç 64738 bulunur. Bu değer RESET vektörünü gösterir. Örnek olarak biz SYS 64738 yaptığımızda C-64 sanki yeni açılıyormuş gibi davranır. Bu adres eşittir. Şimdi bu adresten incelememize başlayalım.
RE FF
FiZES
FCEP
FZEH
FOEC
ZEI
“|
in >
mmo TM CÜ
DT fu
Ti
Ti
m
SÜ
mın
Ok
PAZAR
TT
m
Pod
zn
Doli
CA
ulu
Dn
KA
no
KADA)
nı
— 7
da
nın
DD
m
Lan)
Zi
Yukarıdaki JSR $FDD2 ile çalışan altprogram kartuş bağlantısı olup olmadığını test etmektedir. Bu işlemi de $FD10 adresinde yer alan şifresinin kontrolü ile sağlamakta, kartuş bağlantısı varsa JMP işlemiyle kartuştaki ROM üstünden bu adrese sıçramaktadır. Bazı programların reset ile tekrar çalışması da bu adresteki kodların CBM80 olmasıdır. Bu bağlantı olmadığı durumda JSR $FDA3 ile giriş/çıkış devrelerinin çalışması, JSR $FD50 ile RAM testi ve Basic başlangıç adresi, ekran adresinin belirlenmesi, JSR $FD15 ile giriş/çıkış vektörlerinin adreslere atanması, JSR $FF5B ile video kontrol devresinin çalışması sağlanır. Bu işlemlerin sonunda JMP ($A000) ile Basic ROM devreye girerek Basic çalışmaya geçilir.
İlk Kernal Rutini
Şimdi Kernal rutinlerini incelemeye başlayalım. Bunlardan en basiti karakter çıkışını sağlayan CHROUT rutini. Kullanılışı oldukça basit; A kütüğü karakterin ASCII kodunu içerir, JSR CHROUT ile bu karakter belirli bir çevre birime gönderilir. Burada bilgi ekran üzerine
İkinci Kernal Rutini:
PLOT
PLOT işlemi bir an önce gördüğünüz CHROUT işlemi sırasında ekranın herhangi bir konumunu belirlemede kullanılır. Bu işlem iki ayrı modda çalışır. CLC olduğunda konumu belirler, SEC (carry = 1) olduğunda da konumu okur. Bu rutinin tablodaki adresi
Şimdi ise CHROUT ve PLOT rutinlerinin beraberce kullanıldığı bir program görelim.
DFE MERHABA
Bu programda yapılarak konum belirleme moduna geçilmekte, X ve Y kütükleri konumlara ilişkin bilgiyi taşımaktadır. PLOT işleminden sonra da bir önceki örnekteki mesaj ekrana yazılmaktadır.
ERİR Pis
YATAY
<EİTİS DEREET
3 EKERHRAL
İŞLEME ET
Dö
BAL #FFDZ
OLE VAZMA
LOA #iİZ
#8
SER PLOT
Lük
DEVAM LOR
“EĞ BİTTİ
LER A EBEİR ARTTI
iz DENEK
ETE
gönderilmektedir. Aşağıdaki örnekte MERHABA KERNAL yazısının ekrana çıkışını sağlayan bir program görülmektedir. Bu programda X kütüğü mesajı indekslemek için kullanılır ve '*' karakterinde işlem sona erer. Bu ir
3
DERD veli programı bir monitör program yardımıyla yazıp deneyebilirsiniz. Yalnız adresleri siz belirleyiniz. CHROUT rutini printer, disk driver, RS-232 gibi ünitelere de bilgi gönderir. İleride buna ilişkin örnekler de vereceğiz.
LD
A LOA MEZAT,
Ki CHP “ek
BİTTİ
PS) CHROLT
IMA GPOİRTER BİR ARTTI
DEVAM GİŞLEME ET
EİTTI ETS 3; CİKİS
Lam MEZAT ÜFE & ”
İncelediğimizde yatay ve dikey konumların X, Y kütükle-
İZİ
Cu
-J
B
m m
—
CÜ
el
İLE
EZİZ Pis
m
Per) müm Tı
Bin
riyle belirlendiğini görürüz. Ayrıca Carry işlemine de dikkat ediniz.
|