Makine Dili
Vedat Hallaç eçen ay başladığımız makine dili kursu tüm hızıyla (bilenler için tüm yavaşlığıyla) devam ediyor. Eğer geçen bölümü kaçırdıysanız, sayı düzenleri (özellikle ikilik, onaltılık ve onluk), bitler, baytlar (sekiz bit) ve Nibble'lar (dört bit) hakkında başka bir yerden bilgi Bu sayıda, makine dili için temel oluşturacak bilgisayar kavramlarını açıklayıp, bu konuda BASIC örnekler vereceğim. Öğrenmeniz gereken kavramlardan ilki:
Adresler
BASIC programcıları, bilgisayarın belleği konusunda pek fikir sahibi değillerdir genelde, Çünkü BASIC programlar satırlar halinde yazılır ve birbirinden ayrı elemanlar olarak görünen satırlar sanki belleğin tek bir elemanı gibi görünürler. Bunun sonucu olarak BASIC programcıları belleği uzun satırlardan oluşmuş gibi düşünürler genelde.
Oysa bilgisayarın belleği dediğimiz şey, sadece 0-255 arası sayıları tutabilen 65536 küçük kutucuktur. Bilgisayarınızın beyni olan 6510 CPU (Central Processing Unit - Merkezi İşlem Birimi), onaltı ayrı telden (Adres Hattı) 1 ve O sinyalleri yollayarak bu kutucukların herhangi birine erişir. Daha sonra başka bir yerde bulunan sekiz tel (Data Hattı) yardımıyla bu kutucukta yer alan bilgiyi alır ve gerekli şekilde işler. Adres hattının 16 telden oluşması sebebiyle birbirine karışmayan 2x 65536 adet kutucğu rahatça adresleyebilir CPU'nuz. Her kutucuğun tutabileceği maksimum değer de data hattının genişliğiyle belirlenir. Yani 2 Xx 8-256 değişik değeri bir adres kutucuğunda tutabilirsiniz. CPU'nuz adres hatlarına belli bir değer koyarak buradaki değeri alır ilk olarak. Bu aldığı değeri gerekli şekilde işler ve adres hattındaki değeri bir artırarak bir sonraki kutucukta yer alan değeri elde eder. Bu yüzden, CPU için bir anlamı olan bayt serileri bellekte her zaman ardışık olarak yer alır.
Bilgisayarın belleğini oluşturan kutucuklar, adres hattı sayesinde birbirinden ayrılabilirler. Bilgisayarla bizim aramızda çelişki olmaması için bu adreslere biz de bilgisayarın verdiği isimleri veririz. Genel olarak onaltılık düzen kullandığımız için de bellek kutucukları $0000-$FFFF arası isimler alırlar. Adreslere erişmek için BASIC'i kullanıyorsanız bu kutulara 0-65536 arası değerler sayesinde erişebilirsiniz. Tablo 1'e bakarak bu kutucukların sembolik olarak ne şekilde dizilmiş olduğunu ve belleğe nasıl yerleştiğini görebilirsiniz. Tabii ki bu kutular tek başlarına bu değerleri aklında tutarak hiçbir yere varamaz. Bu yüzden belli adres grupları belli işleri üstlenmiştir. Mesela $D020 — 53280 adresinde yer alan değerin düşük değerlikli nibble'ında (ilk dört bitinde) yer alan sayı, çerçevenin rengini belirler. Bu yüzden iyi görüntüler oluşturmak için mutlaka belli adreslerde ne bulduğunu bilmelisiniz. Tabii ki oturup adres ezberleyeceğim diye kafayı üşütebilirsiniz.
$0000
$0001
$0002 Bit | Bit
$0003 LAN BA
Bit | Bit | Bit | Bit | Bit
$0004
$0005
$ŞEFFA
$EFEB
$EFEC
ŞEFED
ŞEFFE
Tablo-1: Adreslerin belleği oluşturacak şekilde dizilişleri. Bi fikir oluştursun diye çizilmiştir. Gerçek adreslerin fiziksel dizilişleriyle alakası yoktur. Şekilde de gördüğünüz gibi her adreste sekiz bitlik data
il sadece kafanızda bir
Adres kavramı için daha fazla şey söylemek istemiyorum. Ama bu yazının sonlarına doğru genel bir bellek hatasından bahsederek önemli adres gruplarını size göstereceğim, Şimdi gelelim ikinci konumuza:
Ne Yapar Bu CPU?
CPU dediğimiz şey, onlarca bacağa sahip bir entegreden başka bir şey değildir. Kendi içinde, işlerini görmek için kullandığı “register” adı verilen birkaç değişkeni vardır. Bu entegrenin tek yaptığı iş (basitleştirilirse) kısımlarında hiç durmadan belleğe erişip datalar almak, bu aldığı datalara göre işlem yapmaktır. Adreslere erişmek için PC (Program Counter - Program Sayacı) adı verilen bir değişkeni kullanır. Bu register (değişken' tam anlamını vermediği için artık değil 'register' kullanacağım) onaltı bitten oluşur ve $0000-$FFFF arası bir adresi gösterir. Bu adresteki değeri alır almaz bir artar ve CPU'nun zamanı gelince bir sonraki adreste yer alan bilgiyi almasını sağlar. Bu değişken sayesinde “makine dili adını verdiğimiz bayt dizileri çalışabilir. Örneğin, PC $8000'i gösterirken bir bayt alır. Bu bayt CPU'ya, bir sonraki adresten alacağı sekiz bitlik datayı kendi değişkenlerinden biri olan A'nın değerine eklemesini söyler. CPU bir artmış olan PC ($8001) yardımıyla bir sonraki bayta erişir ve bu baytı A'ya ekler. artık komutun işletimi bitmiştir. Ama CPU”nun işi bitmez! PC çoktan bir artırılmış olduğu için $8002'de yer alan bayta erişir ve bu baytın kendisine söylediği işi yapmaya hazırlanır. Kısacası her şeyin efendisi gibi görünen CPU, bellekte yer alan bilgiler tarafından yönetilen basit bir köleden başka bir şey değildir. Bellekte yer alan bu datalar da aslında makine dili programından başka bir şey değildir. Ama tutup da $EA baytının CPU'ya “Hiç bir şey yapma ve bir sonraki komutu al!” emrini verdiğini öğrenmeye çalışmayahm diye bu baytlara sembolik komut isimleri verilmiştir. Mesela deminki $EA baytının sembolik ismi NOP'tur (NOP — No OPeration - İşlem Yok). “İyi de şimdi de baytlar yerine üç harflik sembolik isimleri ezberlememiz gerekecek!” diyenleriniz olacaktır. Bu konuda haklısınız, ama sembolik isimler sayesinde 256 baytın tek tek anlamlarını ezberlemek yerine on-onbeş komut grubunun sembolik isimlerini öğrenmeniz yeterlidir. Bu konuda hemen paniğe kapılmayın, zamanı geldikçe, kullana kullana bu komutları kolayca öğreneceksiniz. Hatta makine diline bu kadar değinmek bile şimdilik yeterli.
RAM Kim, ROM Ne Yapar?
Bilgisayar terminolojisinde sık sık kullanılan iki terim RAM ve ROM'dur. Bu ikisi, belli bir adreste yer alan bellek gözesinin en temel özelliğini belirler. ROM, yani Read Only Memory (Sadece Okunabilir Bellek), adının da belirttiği gibi sadece okunabilir. Buraya yazmaya kalkarsanız hiç bir sonuç elde edemezsiniz çünkü bilgiler bu bölgelerde yer alan entegrelere elektronik olarak kazınmıştır. Bu sayede, bilgisayarı kapatsanız da bu bilgileri kaybetmezsiniz. ROM, genel olarak bilgisayarın diğer cihazlarla (teybiniz ya da disk driver'ınız gibi) alış verişi kontrol eden makine dili rutinleri içerir. Bunun yanında BASIC yorumlayıcısı adı verilen program da ROM'un bir tarafında yazılıdır. ROM'larda bulunan programlar, tamamıyla makine diliyle yazılmışlardır. Sadece belli bölgelerde hata mesajları, komutlar, vb. için datalar yer alır. RAM (Random Acces Memory - Rastlantısal erişilebilir bellek) ise hem okunabilen, hem de yazılabilen bölgeleri temsil eder. Bu alanlar bilgisayara verilen elektrik kesildiği anda içeriklerini kaybeder ve bilgisayarın her açılışında tekrar bilgi yazılmalıdır. bilgisayarlara asıl gücünü veren bellek bunlardır, çünkü RAM'e istediğiniz gibi program yazabilir, bilgisayarınızın istediğiniz (ve programlayabildiğiniz tabii ki) her işlemi yapabilmesini sağlarsınız. Yukarıda söyledikle- RAM'de yer alan bilgilerin yok olmasının tek sorumlusunun elektriğin kesilmesi olduğu sonucuna varabilirsiniz. Hatta daha da ileri giderek, bilgisayar kapatıldığında bile RAM'lere 5 Volt vererek içeriklerini koruyabileceğinizi düşünebilirsiniz, ama ne yazık ki bu mümkün değildir. Çünkü RAM'lerin içeriklerinin aklınızın alamayacağı bir hızla, sürekli tazelenmesi gereklidir. Bilgisayarınızın içinde yer alan donanımı bu işi size hissetirmeden yapar.
Sadece RAM ve ROM mu?
Aslında bilgisayarınızın belleğinde sadece RAM ve ROM varmış gibi görünüyor. Ama, daha önce de bahsettiğim gibi CPU'- nuzun bir sürü yardımcısı varır. Mesela VIC adı verilen çip, grafik işlerini düzenler ve bellek tazelenmesi görevini üstlenir. Bellek de kendisine $DO00-$D400 arasını ayırmıştır. bu bölgede RAM değil. VIC'in şahsi registerleri bulunur. Bu sayede değer verdiğiniz zaman VIC çerçeve rengini istediğiniz gibi değiştirebilir. Aynı şekilde, bilgisayarınız ses düzenini kontrol eden SİD $D400- $D800 arasında yuvalanır. SID registerlarının ilginç bir özelliği daha vardır. $D400- $D800 arasına (bir iki adres dışında) sadece yazabilirsiniz. Bu bölgeyi okumaya kalktığınız zaman saçma sapan değerlerle karşılaşırsınız. Belleğin bir kısmını işgal eden çipler arasında CIA adı verilen giriş-çıkış hizmetleri de vardır. Bu çiplerden iki tane vardır. Bunlardan biri klavye ve joystick'i okumaya çalışırken, diğeri de kaset ve disk iletişim hatlarına kumanda eder. Bunlar dasırasıyla $DC00-$DCFF ve $DO0-$DDEF arasındaki bellek adreslerinde yer alırlar. Bunlardan başka, VIC'in dolaylı olarak kontrol ettiği bellek alanları vardır. Bu bölgelere size çaktırmadan erişen VİC, elde ettiği değerleri kullanarak görüntüyü oluşturur. Bilgisayarınız açıldığı anda yazıların yazıldığı karakter ekranı böyle bir bölgedir ve $0400-$07FE arasında yer alır. VIC'i, başka bölgelerden veri almak üzere programlamanız da mümkündür, ama VIC'i programlamayı öğrenmek için çok acele etmeyin, çünkü önce makine dili program yapmayı öğrenmeliyiz. Burada bahsedilmeye değer bir bellek bölgesi daha kaldı: Renk RAM'i. $D800-$DCOO arasında yer alan bu bölgeyi diğerlerinden ayıran özellik, her adreste dört bit saklayabiliyor olması! Bu dört biti kullanarak Commodore'un 16 renginin hangisini iztediğinizi kolaylıkla belirtebilirsiniz. Bu adresleri okuduğunuz zaman hiçbir değişiklik farketmezsiniz, sadece okunan tüm değerler $EF0- $EF arasındadır. Buraya yazdığınız baytla- Tın da üst dört biti hiç ciddiye alınmaz. Normal bilgisayarda, bir bellek adresinde sadece ve sadece bir değer saklanabilir. Yani bir adreste hem RAM hem de ROM saklanamaz. Ama Commodore 64'ün harika tasarımı sayesinde, tüm ROM'ların altında RAM bulunur. Yani istediğiniz anda bilgisayarınızı 64K RAM olarak kullanabilirsiniz. Tabii bunu yapmak hiç de kolay değil. Bu yüzden, bu konuyu çok sonra tekrar açacağım. İlk aşamada, normal bir kullanıcının göreceği bellek haritasını bilmeniz size yetecektir. Eğer bu yazının sonunda verdiğimden daha detaylı bir bellek haritası vetirsem, bu sadece kafanızı karıştırır. En iyisi biraz sabırlı olun ve 64K RAM'le başa çıkabilecek hale gelene kadar bekleyin. Ama bu işi hemen öğrenmek istiyorsanız, Teleteknik yayınlarından Programcının El Kitabı'- nda bu konu tüm detayıyla ele alınıyor. Bilgisayarınızın RAM haritasını çıkartmadan önce, son bir konuya daha değinmek istiyo- Tum:
Bilgisayarın Hızını Ne Belirler? Sık sık “Commodore 64 1MHZ'dir. AMI-
GA 7.14 Mhz'de çalışır” gibi cümlelere her zaman karşılaşırsınız. MHz (MegaHertz)'in
$0000-$03FF: Sistem değişkenleri. Sakın buraları ellemeyin. Sistem gidıklanıyor.
$0400-$07E7: Karakter ekranı bilgileri. Ekranda görünecek harfler burada saklanır (siz değiştirmezseniz).
$07E8-$07F7: Kullanılmaz. Sekiz baytlık data alnı olarak kullanabilirsiniz.
$07F8-$07FF: Spriteların grafik datalarının bellekteki yerini belirleyen baytlar. Sonra sık sık kullanacaksınız.
uçabilir.
$0800-$9FFF: BASIC program, değişken ve dizi belleği. Eğer üst sınırı aşağı çekmezseniz programlarınızı buralara yazmayın,
$A000-$BFFF: BASIC yorumlayıcısı rutinlerini içeren ROM. Altındaki RAM'i daha sonra kullanacağız.
$C000-$CFFF: Bellekte tehlikesizce kullanılabilen (neredeyse) tek bölge. Programların çoğu burada çalışacak şekilde yazılır.
$D0O00-$D3FF: VIC registerlerinin yuvası.
$D400-$D7FF: SID registerlerinin adesleri.
leri.
$D800-$DBFF: Renk RAM'ini oluşturan dört bitlik bellek adresokumakta kullanılır.
$DC00-$DCFF: CIA#I registerleri. Klavye ve joystick portlarını
CLAH2 registerleri. Kaset ve disketten sorumludur.
alan.
$DE00-$DFFF: Gelecekte eklenebilecek çipler için giriş/çıkış alanı. Yani çipin registerları için ayrılmış kullanılamayacak durumda bir rutinlerinin yer aldığı — yer.
$E000-$FFFF: KERNAL ROM. Tüm klavye, kaset, okuma
Bilgisayarın hayati — organı.
Tablo-2: Commodorc'unuzun bellek haritası. Tabii ki bulabileceğiniz en basit haliyle. Makine dilinde ustalaştıkça, dahâ karmaşık bellek haritalarına bu satırlarda rastlayabileceksiniz.
bilgisayarın hızını belirten bir birim olduğunu artık öğrenmişsinizdir. Ama MHZ'in gerçekte ne olduğunu hiç merak ettiniz mi? Merak etmiyorsanız da kurtuluşunuz yok, çünkü bu garip yazıda bu konuya da değinmeden edemeyeceğim. Umarım kafanızı fazla karıştırmam(!). Yazının başlarında CPU'nun PC yardımıyla bellekten veri alıp durduğunu söylemiştim. Ama orada bahsetmediğim bir nokta vardı. Sanırım bu sizin de kafanızı kurcalamıştır. CPU'nun PC'yi neye göre artırdığını ya da belleği ne zamanlar okuduğundan hiç bahsetmedim. Aslında CPU bu zamanlama konusunda bile pek serbest değildir. Sistem saati adı verilen sinyali bacaklarından biriyle inceleyen CPU, bu saatin belli anlarında belli işleri yapmak üzere hazırlanmıştır. CPU hızını belirleyen MHz'de aslında bu saatin frekansından başka bir şey değildir. Tabii ki CPU'nun uyduğu bu saat ne kadar hızlı çalışırsa, bilgisayarınız işlemleri o kadar hızlı yapar. Hemen ““O zaman saat frekansını artıralım!” diye atlamayın. Bilgisayarınız daha hızlı bir şekilde güvenlik içinde çalışabilseydi, Commodore firması bu işi sizden önce yapardı. Saat frekansını sınırlayan en önemli faktör, belleğin hızıdır. Eğer bellek verilen saat frekansına ayak uyduramayacak kadar yavaşsa, CPU”nuza durmadan hatalı veri iletir. Sonuç olarak bilgisayarınız en kısa zamanda kilitlenir.
Sonunda Bellek Haritası:
Son olarak kısa bir bölümde belleği $0000'dan başlayarak sonuna kada bölge belge inceleyelim isterseniz. İlk olarak göz önüne almamız gereken bölge olan $0000-$03FF sistem tarafından değişken bölgesi olarak kullanılır. Burada ufak tefek boş alanlar bulabilirsiniz, ama ben sizin yerinizde olsam bu bölgeyi rahat bırakırdım. Çünkü en ufak hatalı kullanımınızda ya programınız çalışmaz ya da sistemi kız- Sırada ekrandaki düşük çözünürlükü görüntüyü saklayan $0400-$07E8 var. Bu bölgedeki her bayt, ekrandaki harflerden (daha doğrusu karakterlerden) birini aklında tutar. Mesela POKE 1024,1 yazıp RETURN'e bastığınız zaman ekranın sol üst köşesinde “A” harfi belirir. 1'i 1024 ($0400) yerine 1025 ($0401) adresine yazmış olsaydınız bir yandan “A” harfi belirecekti. 1064 adresi ise bir satır altta en sola harfi basacaktır. X ve Y koordinatına basılacak harfin hangi adrese geleceğini şu formülle hesaplayabilirsiniz:
Tabii ki ekranın sol-üst köşesinin koordinatının 0,0 olduğunu kabul etmelisiniz bu formülü kullanmak için. $07E8-$07F7 arasında geçerli bir veri yoktur. İsterseniz üç-dört baytlık bir data alanı olarak burayı kullanabilirsiniz. $07F8-$07FF arasında, 0. Sprite'tan başlamak üzere 8 SPrite'ın grafik datalarının adresini belirleyen bayt yer alır. Bu baytı 64'le çarparsanız Sprite'ın grafik datalarının bellekteki adresini hesaplayabilirsiniz. Şu anda sprite konusunun detaylarına girmeyeceğim. Kursumuzun ilerleyen bölümlerinde bu konular da yer alacak. $0800-$9FFF arasında BASIC programı ve değişkenler yer alır. bu bölgenin ayrıntılı bir açıklamasını “ROM'unuzu kullanın” yazı dizisinde yapmıştım. İhtiyacı olanlar o yazıya bakabilirler. $A000-$BFFF arasında BASIC yorumlayıcısının ihtiyacı olan makine dili rutinler yer alır. Bu bölgeye kısaca BASIC ROM adı verilir. Burada yer alan rutinlerden kullanılabilecek olanlarını da kursumuzun ilerleyen bölümlerinde vereceğim. $C000-$CFFF arası tamamen kullanıcıya ayrılmış boş alandır. Ama VIC'in özel (ve garip) tasarımından dolayı bu bölgeyi grafik için kullanmak oldukça zordur. Bu yüzden genelde program kodu ve datası için ideal bölge olarak görülür. Biz de hemen hemen tüm programlarımızı bu bölgeye yazacağız. BASIC, POKE komutu dışında hiçbir yolla bu bölgeye erişmez. Yani buradaki datalarınızın yanlışlıkla silinmesi diye bir şey söz konusu bile değildir. Şu anda bu alan size küçük görünebilir. Ama hiç tasalanmayın, bu bölgeyi dolduracak kadar büyük bir program tasarlamak için kursumuz bittikten sonra bile oldukça çok çalışmanız gerekecek.
adresleri VIC yardımcı çipine ayrılmıştır. Ama VIC'in sadece 46 re: gister'ı olduğu için $DO40 adresine eriştiğinizde (bu adrese yazdığınızda ya da bu adresi okuduğunuzda) doğrudan doğruya $2D000'a erişmişsiniz gibi işlem yapılır. Aynı şekilde $DO80, $DOCO, $D100, ... adresleri de aynıdır. Kısca VİC kullanılırken IK gibi görünen bellek alanı aslında 64 baytlık 16 bölge olarak çalışır (Uuups. Kafanızı karıştırdım galiba). En iyisi $DI160 gibi adreslere değerler yazın ve çerçeve renginin değiştiğini gözleyin. Bu sayede $DO00-$DO3F bölgesinin kopyalarının $DO40-$D3FF arasını nasıl doldurduğunu gözünüzle görebilirsiniz.
$D400-$D7FF adresleri de SID çipine aittir. SID'in de sadece 28 registeri olması (ve 28 adrese ihtiyacı olması) sebebiyle renk RAM'i bulunur. Bu adreslerin en başında yer alan $D800, yani 55296, sol üst köşede yer alan harfin (karakterin) rengini belirler. Bu bölge de aynı karakter ekranı gibi düzenlenmiştir. İstediğiniz X, Y koordinatlarında yer alan karakterin rengini belirlemek için kullanacağınız adresi de deminki formüle benzer bir formülle hesaplayabilirsiniz:
ADRES=
$DC00-$DCFF arasındaki bölge de CIA çiplerinin ilkine ayrılmıştır. Bu alanda yer alan adresler yardımıyla klavyeyi ve joystick portlarını okuyabilirsiniz. Bu çip register yönünden en fakir olanıdır. Sadece 16 registere sahip olduğu için bol bol adres tekrarı yapar.
$DD00-$DDFF adresleri de CIA çipinin ikincisine aittir. Bu çip de 16 registerlidir ve kaset ile disk iletişimi konusunda uzmandır.
$DE00-$DFFF arası ne size ayrılmıştır, ne de bilgisayar tarafından kullanılır. Eğer bir tasarımcının kendi çipleri için adres alanına ihtiyacı olursa burayı kullansın diye ayrılmış bellek alanıdır burası. Bazı kartuşlar programlarını burada saklar. Şu anda hiçbir işinize yaramaz.
$E000-$FFFF adresleri de BASIC ROM'a sığmayan yorumlayıcı rutinlerinin birazının ve giriş çıkış rutinlerinin tamamının saklandığı bellek alanıdır. KERNAL ROM olarak bilinir. Kullanıcıdan bilgi girmek istediğiniz zaman, ya da program yüklemeniz gerektiğinde bu adreslerde yer alan rutinlerin kapısını aşındırmanız gerekecek. Yeri geldikçe KERNAL ROM'dan bilgiler de vermek niyetindeyim. Tablo 2'yi kullanarak adreslerin tam olarak belleği nasıl parçalara ayırdığını görebilirsiniz. Bu yazıda verdiğim bu bellek haritasının tek amacı sizin programlarınız için kullanılabilecek seviyeye geldikçe detaylı bellek haritaları da yazımızda yer alacak. Gelecek ay makine dili komutlarının en basitleriyle kursumuzun en eğlenceli kısmına girişeceğiz. Umarım sizin de hoşunuza gider. Bu aylık hoşçakalın.
Hatasız Kul Olmaz:
Bu dergide yazı yazdığım iki sene boyunca hatasız yayınlanan bir yazım neredeyse hiç olmadığı için, bu yazının sonuna bir hata köşesi açmaya karar verdim. Bulduğunuz her türlü hatayı bana bildirmeniz sizin ve arkadaşlarınızın yararına olacaktır. Gelelim geçen sayının (77) hatalarına: 1) 17. sayfada yer alan tabloda yazılmış. Bu “53901” olacaktı. 2) 18. sayfadaki tabloda yer alan “250 — $FA”'nın ne olduğunu anlamak için çok uğraşmayın. Doğrusu “$FA” olacaktı. 3) 19. sayfanın başındaki formüle fazladan bir “2” girmiş. Siz onun üstünü karalarsınız. 4) Aynı kolonun en altındaki formülde de “B” ile “2” arasına “4” girmiş. Doğrusu olacaktı. 5) Geçen sayının yıldızı burada işte: Makine dili yazısında tablo unutulmuş. BASIC ile Makine dilinin hızlarını karşılaştıran tablo bu sayfalarda yer alacak (inşallah). 6) 26. sayfada yer alan resimlerin ilkinin ELECTRIC'e ait olduğu söylenmiş. Aslında bu grafiği ben çizmiştim... Şaka, şaka! 7) Program Döküm Eki'nin 23. sayfasında bulunan INVERT/H/K programının benle ve yazılarımla hiçbir alakası yoktur. Sanırım bir arkadaşın programı benimkiler arasına karışmış. Kendisinden dergimiz adına özür diliyorum. Geçen sayıda bulabildiğim hatalar sadece bu kadar. Umarım hata sayısı gelecek dergilerde daha az olur.
Selam Arkadaşlar; Bir aylık aradan sonra yine beraberiz. Her ne kadar geçen ay sizlere kaskad diyot bağlantılarından söz edeceğimizi belirtmiş isem de bu sistemin kullanım alanlarının az olması ve bizim amaçlarımız dışında kalması bu konuyu elimine etmeme sebep oldu ve bu ay daha çok ilginizi çekeceğini umduğum transistörler konusuna değinmeye karar verdim. Vaktimiz olduğu taktirde bir ara kaskad bağlantılara ve bizimle olan son derece sınırlı ilgisine değineceğim. Şimdi ise konumuz transistörler. Aynı lambalarda olduğu gibi transistörler de iki elemanlı bir parça olan diyotların küçük bir zaman diliminde son derece hızlı gelişmesi sonucu ortaya çıkmıştır. Hatırlayacağınız gibi ilk lambalar da diyot ismi ile anılan ve sadece akımı tek yönde ileten lambalardı sonraki dönemlerde bu lambaya eklenen bir kontrol ucu ile triyot lambalar elde edilmiş bu sayede de anod-katod bölgesinden akan akım şiddeti kontrol edilebilmişti. Yarı iletkenlerin keşfinden sonra yine önce diyotlar imal edilmiş ve bunu takiben 1958 yılında yarı iletken diyotlara kontrol ucu eklenerek transistörler elde edilmiştir. Bir diyotun uçları anod ve katod olarak adlandırıldığı halde içinden geçen akım şiddeti kontrol edilebilen bir diyot olan transistörde uç isimleri tamamen farklılaşmıştır. Tam olarak birebir eşleme yapmak yanlış olmakla birlikte biraz sonra vereceğim olayları tam olarak algılayabilmeniz açısından diyottaki uçlarla transistördeki uçları eşleştirerek veriyorum. Elektron toplayan katod kollektör (collector), elektronları yayan anod emiter (emitter) ve kontrol ucu baz (base) adını almışlardır. Aynı diyotlarda olduğu gibi transistörlerin de germanyum ve silisyum tabanlı modelleri vardır. Ayrıca transistörleri N-P-N ve P-N-P olmak üzere sınıflayabiliriz. Transistörlerin emiter ve kollektör kısımları aynı tip yarı iletkenden imal edilirler. O halde N-P-N bir transistörde emiter ve kollektör N tipi yarı iletken baz ise P tipi bir yarı iletkendir. Aynı şekilde P-N-P bir transistörde emiter ve kollektör P tipi yarı iletken baz ise N tipi yarı iletkendir. Biraz evvel diyotlar ile transistörleri birebir eşlemenin doğru olmadığını belirtirken kastetmek istediklerimden biri de diyotlarda anod ve katod farklı yarı iletkenlerden imal edildiği halde transistörlerde bu uçlara karşı gelen emiter ve kollektörün aynı tip yarı iletkenden üretildiği idi. Transistörlerin çalışma prensiplerine ve kutuplama (polarma) yöntemlerine geçmeden evvel bazı özel transistör tiplerinden bahsetmek istiyorum. Yukarıda bahsettiğim transistör tipleri bipolar dediğimiz türde olup genel amaçlı transistörlerdir. Çeşitli katkı maddeleri ile değişik özelliklere sahip transistörler üretilebilir.
Yüksek ve çok yüksek frekanslarda çalışabilen transistörler, güç transistörleri ve bu ikisinin bileşiminden oluşan yüksek hızlı güç transistörleri (hızlı anahtarlama ya da tetikleme yapabilen transistörler). Bu transistörler TTL olarak bildiğimiz ve lojik ailesinin en tanınan entegrelerinde kullanılırlar. Güç transistörlerinde, transistörden geçen akım ve dolayısıyla transistör üstünde harcanan güç sadece katkı elemanları kullanılmak suretiyle ancak belli bir seviyeye kadar arttırılabilir. Daha yüksek güçler için kılıf ve yarı iletken dizilimi düzenlemesine gidilir. Örneğin yüksek güçler için oldukça büyük metal kılıflar tasarlanmıştır. Bu kılıflar teknik resim olarak ölçülendirilmiştir ve belli standartları vardır ayrıca kılıfa konulacak transistörlerin bacak dizilimleri de bellidir. Bipolar transistörlerin giriş empedanslarının düşük olması, ısıl sürüklenmeye yatkın olmaları değişik transistör tiplerinin geliştirilmesini zorunlu kılmıştır. FET (Field Effect Transistor) dediğimiz çok yüksek giriş empedansına sahip (10^12 ohm) transistörler geliştirilmiştir. Bunların bacak yapıları ise şu şekilde farklılaşmıştır. Bipolar transistördeki baza karşılık gelen geyt (gate), kollektöre karşı dreyn (drain) ve emitere karşı gelen sors (source) vardır. FET'ler de N kanal ve P kanal olmak üzere ikiye ayrılırlar, aynı bipolar transistörlerde olduğu gibi bu N ve P geytin yapıldığı yarı iletken türünü belirler. FET teknolojisinin ardından MOSFET (Metal Oxide Silicon Field Effect Transistor) teknolojisi geliştirilmiştir. Bu teknolojide yarı iletkenler metalin oksidasyonu sonucu elde edilmektedir. Buraya kadar gelmişken MOS teknolojisinde üretilen elemanların statik elektriğe karşı son derece duyarlı olduğunu ve bunları tutarken ya da montaj ederken çok dikkatli olunması gerektiğini belirtmekte fayda var. Başlıca transistör türleri hakkındaki bilgileri de bu şekilde özetledikten sonra biraz da çalışma prensipleri üzerinde duralım. Transistör kollektör-emiter ya da emiter-kollektör yönünde geçen akımı bu akımdan defalarca küçük bir baz akımı ile kontrol edebilen bir temel devre elemanıdır. Miliamper hatta mikroamper mertebesindeki akımı ile kontrol edebilirler. Miliamper hatta mikroamper mertebesindeki akımlar ile çok yüksek akımlara kumanda edebilirler. Baz akımı transistörden akan akımın yüzde 2'si kadardır, toplam akımın yüzde 98'i ise kollektörden akar ve bunların toplamı kadar akım da emiterden. Buna bağlı olarak bir transistördeki en küçük alan baz bölgesidir çünkü buradan sadece ve sadece çok ufak bir kontrol akımı akar. Kollektör alanı ise oldukça geniştir ve emiter alanı en büyük olanıdır. Bir transistörün başlıca 3 çalışma bölgesi vardır (aslında 4 fakat biri nadir hallerde kullanılır). 1) Kesim hali (transistör yalıtımda) 2) İletim hali (transistör belli bir sınır dahilinde iletimde) 3) Doyum hali (transistör tamamen iletimde) 4) Ters iletim (pek kullanılmaz) Yukarıda maddeler halinde verilmiş olan çalışma aralıklarını tek tek ve detaylı olarak kabul edilir. Transistörün kollektör-emiter arasını ayarlı bir direnç olarak düşünürsek, kesim halinde bu direncin değeri maksimumdur ve 20 mega ohm civarındadır. Ters iletim halinde ise transistör ters kutuplanmıştır. Önemli transistör parametrelerinden biri olan ve kollektör akımının baz akımına oranını simgeleyen Hfe parametresi ters iletim durumu için her zaman 1'den küçüktür. İletim halini açıklayabilmemiz için önce bir transistörün iletime geçme şartlarını bilmemiz daha uygun olur. Bir transistörün iletime geçme şartı kısaca şöyle özetlenebilir: İletim hali için baz-emitör gerilimi 0.6-0.7 V civarında olmalıdır yani doğru yönde (iletim yönünde) kutuplanmalıdır. Baz-kollektör ise ters yönde (tıkama yönünde) kutuplanmalıdır. N tipi transistör için baz gerilimi emiter gerilimine göre pozitif, P tipi transistör için baz gerilimi emiter gerilimine göre negatif olmalıdır. İletim hali denildiği zaman genellikle transistörün analog değerlerde çalıştığı ve kollektör-emiter arası direncin belli sınırlar arasında sürekli değer değiştirdiği anlaşılır. Bu çalışma sınırları çeşitli yöntemler kullanılarak belirtilir. İsterseniz bu sınırların nasıl tayin edildiğini, geri besleme hakkındaki bilgileri, transistörün doyum halinde çalışmasını ve lojik alanında transistör kullanımını gelecek ayki yazımıza bırakalım. Hoşçakalın...