Commodore sayı 78, sayfa 17

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 17

$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:

Klavyeyle gezinmek için ← ve → tuşları.