19 Haziran 2018 Salı

Nedir Bu Commodore 64?


Bugün C64'ün nelere kadir olduğu hâlâ tam olarak bilinemiyor. Şu üç beş sayfada edineceğiniz temel bilgiler size sınırsız serüvenlerin kapısını açacaktır.
Commodore 64'ünüzü aldınız. Bilgisayarın, bilinen ve bilinmeyen tüm soruları cevaplandıracak bir bilgi bankası olmadığını az zamanda öğrendiniz. Ama 64'ün marifetlerini de azar azar keşfetmeye başladınız; önce "Raid Over Moscow"da Moskova'yı bombaladınız. "One On One"da Larry Bird'le basket attınız. Birkaç sınav sorusu cevaplandırmaya çalıştıktan sonra, klavyede biraz gitar çalışmayı denediniz. Sonra yazılarınızı bir kelime-işlem programında yazmaya başladınız. Belki de cep kalkülatörünüzü atıp, hesaplarınızı 64'te yapmaya alıştınız; defter yerine disket kullanmaya karar verdiniz. Ekranda yarattığınız sanat eserlerini eşe dosta gösterdiniz.

Yavaş yavaş farkına vardınız ki, bu marifetli aletin yapabileceklerinin gerçekten sınırı yok. Hatta o kadar yok ki, COMMODORE-64'ü imal edenler bile daha neler yapabileceğini bilmiyorlar. Örneğin, bugün bir SAM programı her Commodore'cunun kasetine girmişken, ilk başlarda COMMODORE firması bile COMMODORE-64'ün konuşabileceğinin farkında değildi!
Peki bu harika aletin aslında bir sıra elektrik sinyalini alıp bir dizi başka elektrik sinyaline çevirmekten başka hiçbir marifeti olmadığını söylese ne dersiniz?

Mikroişlemci

COMMODORE-64'ün içinde asıl bilgisayar 4 cm. uzunluğunda, 2 mm. kalınlığında 44 ayaklı bir nesne; daha doğrusu, bunun da içinde saklı 3-4 milimetrekare büyüklüğünde bir silikon kristalciği. Adı Mikroişlemci (microprocessor) veya Merkez İşlem Birimi (CPU). Mikroişlemcilerin çeşitli modelleri var. COMMODORE-64'te bulunan 6510 denilen türden ve APPLE'da, COMMODORE-8296, 16 ve PLUS-4'te, ATARİ'de bulunan bir benzeri. Öbür yaygın mikroişlemci çeşitleri Z-80 (SPECTRUM, AMSTRAD), Intel 8088 (COMMODORE PC, IBM, NCR) ve Motorola 68000 (AMIGA, SINCLAIR, QL, MACINTOSH).

Mikroişlemcinin yaptığı tek iş, bazısı açık bazısı kapalı yüz binlerce ufak elektrik anahtarında o anda bulunan açık-kapalı sırasına göre, bazı anahtarları açıp bazılarını kapatmak, böylece yeni bir açık-kapalı dizisi oluşturmak. Bu yüz binlerce anahtar da bilgisayarın belleği.
6510, 8 bit'lik bir mikroişlemci, 16 bit'lik bir adres kapasitesine sahip ve yaklaşık 1 megaherz hızla çalışıyor. Bunun anlamı şu: 6510 türü mikroişlemci, bellekteki anahtarları aynı anda sekizerlik gruplar halinde okuyor, işliyor ve değiştiriyor. Bu sekizli gruplar üzerinde saniyede yaklaşık 1 milyon işlem yapabiliyor. Ve toplam en çok 2 üstü 16, yani 524.288 anahtarlı ya da 65.536 tane sekizli gruptan oluşan bir belleği kontrol edebiliyor.

Açık-kapalı anahtarların sıralamasına dayanan kodlama sisteminin adı makine kodu ya da makine dili, 6510 makine dilinin inceliklerini, arkadaşımız Baytan Bitirmez'in köşesinde izleyebilirsiniz.

BİT ve BYTE

Bir sokakta bazısı ev bazısı boş arsa olan bir sıra parsel düşünelim:
##-##--#-#--#
Her eve 1, her arsaya 0 sembolünü verirsek, bu sokağın durumunu 1101100101001 diye özetleyebiliriz. Bu rakamlar dizisini şimdi ikili aritmetikte bir sayı olarak ele alırsak, 6963 sayısını elde ederiz. Aynı şekilde; iki arsa bir ev iki ev iki arsa bir ev yerine kısaca 89 diyebiliriz. Bunun gibi, bilgisayar belleğinde her açık anahtarı 1, kapalı anahtarı da 0'la simgelemek büyük kolaylıklar sağlayacaktır.

Bu sistemde, açık veya kapalı bir anahtarı temsil eden 1 veya 0'lara bit (binary digit) adı veriliyor. İşlemlerimizi sekizden yaptığımız için de, sekiz bit'ten oluşan bir sayıyı ifade eden bayt diye bir birim kullanılıyor. Bir bayt'ın sahip olabileceği en düşük değer 00000000, yani 0; en yüksek değer ise 11111111, yani 256. "Belleğin bir yerine 123 sayısını koymak" gibi bir ifade görürsek, bundan, bir dizi anahtarı 01111011 haline getirmek anlamını çıkaracağız.

BELLEK


Dünyada hafızası fil ve deveden daha güçlü olan tek yaratık, bilgisayar. Bilgisayarın belleği, dış görünüşü tıpkı mikroişlemciye benzeyen çipler üzerinde, binlerce açık/kapalı anahtarlardan oluşuyor. Bellek çiplerinin üç çeşidi vardır:
ROM'larda (Read Only Memory), hangi anahtarların açık, hangilerinin kapalı olduğu fabrikada belirlenir. Sonradan değiştirmek mümkün değildir.
RAM (Random Access Memory) belleğin anahtarlarını, mikroişlemci istediği gibi kapatıp açabilir. Ama bilgisayar prizden çekildiği anda, tüm anahtarlar kapanır ve RAM bellekte hiçbir şey kalmaz.

EPROM'lar (Erasable Programmable ROM) ise, elektriğin kapatılmasından etkilenmez, ama EPROM programlayıcı adı verilen özel cihazlarda silinebilir ve yeniden programlanabilir.
İster ROM, ister RAM, ister EPROM olsun, bellek sadece belli açık-kapalı dizilerini simgeleyen bir dizi sayıyı içeriyor. Bu sayıların bir kısmı, belli bir kod uyarınca mikroişlemciye birtakım sayıları alıp başka sayılara çevirmesini, belleğin bir bölümündeki sayıları belli kurallar uyarınca değiştirmesini bildiren programlar olabilir. Bir kısmı, mikroişlemci tarafından işlenecek veriler, örneğin Fenerbahçe'nin puanları ve golleri veya döviz kurları olabilir. Sayılarla ifade edilen bir nota dizisi de olabilir. Alfabenin harflerini Mors koduna benzeyen ve "ASCII kodu" adı verilen bir sayı sistemiyle simgelersek, örneğin bir makale de olabilir.
Mesela, 0100001 = A, 01000010 = B, 01000011 = C vb. olsa,
01010011 01000101 01001100 01000001 01001101 = 83,69,76,65,77 = SELAM demektir ve belleğin 5 bayt'lık bir köşesinde durabilir.

COMMODORE-64'ün belleğinde, 24 kilobayt ROM var. ROM'da mikroişlemciye klavyeden gelen sinyalleri nasıl düzenleyeceğini ve PRINT, LOAD, GOTO gibi BASIC kodlarını görünce hangi sinyal dizilerini üreteceğini bildiren programlar bulunuyor. Ayrıca Karakter Üreteci denilen bir ROM da, ekranda harf ve şekiller olarak gördüğümüz yanık/sönük nokta kalıplarını içeriyor. 64 Kilobayt RAM'ın bir kısmı boş. RAM'daki ana program, bu bölgeleri, bizim vereceğimiz (ya da kasetten yüklenecek) program ve bilgiler için ayırmış. Klavyeden bir şeyler yazıp [RETURN]'e basınca, mikroişlemci, ROM'daki kod uyarınca, bizim gönderdiğimiz sinyalleri başka bir sayı dizisine çevirip RAM'ın bu kısmına yerleştiriyor; yani pat pat bazı anahtarları açıp bazılarını kapatıyor. RAM'ın bir kısmı ise özel amaçlara ayrılmış: Örneğin 1024'üncü bayt'tan 2023'üncü bayt'a kadar olan kısımda bulunan rakam dizileri, harf ve şekiller olarak ekrana yansıyor; 53281'inci bayt ekran rengini belirliyor vb.

INPUT / OUTPUT

Yalnızca mikroişlemci ve bellekten oluşan bir bilgisayar müthiş işlemler yapabilir; ama biz bu işlemlere ne müdahale edebiliriz, ne de işlemin sonucunu görebiliriz. İşlemci bilgisayarın beyni, bellek de iç oranları ise, şimdi bilgisayarımıza beş duyu organıyla kol bacak takmamız gerekiyor.
Belleğin bazı anahtarlarını mikroişlemciden bağımsız olarak açıp kapatan, yani belleğe belli sinyal dizileri gönderen cihazlara input (giriş) cihazları; bellekteki sinyal dizileri uyarınca belli işlemler yapanlara da output (çıkış) cihazları adı verilir. Input ve output cihazları, asıl bilgisayarın bir parçası değil, elektrikle işleyen ve anlamlı sinyal dizileri üreten (veya anlamlı sinyal dizilerinden etkilenen) herhangi bir alet, input/output cihazı olabilir.

En basit input cihazı klavye. Klavye, sıra sıra tuştan oluşan ve bir tuşa basıldığında 8 bit'lik bir sinyal gönderen bir nesne. Tuşların üzerinde birtakım harflerin bulunması hiç önemli değil. Önemli olan, örneğin soldan beşinci tuşa basınca 01110001 gibi bir sinyalin çıkması. Bu sinyal belleğe ulaşınca mikroişlemcinin bunu neye çevireceği, programa bağlı bir olay.
Bir başka input cihazı joystick. Joystick, sadece 16 farklı çeşit sinyal gönderebilen basit bir alet. Paddle ise 256 çeşit sinyal gönderebiliyor.

Optik okuyucu ve lightpen, bir noktada ışık bulunup bulunmadığına göre 1 veya 0 sinyali gönderen cihazlar. Elektrikli piyano klavyesi de, tıpkı normal klavye gibi bir sinyal üretici. Ses dalgalarını elektrik dizilerine çeviren bir mikrofon da bunun gibi.
En basit output cihazı ise ekran. Ekran, gelen elektrik sinyallerini çeşitli renklerde mikroskopik ışıklı noktalara çeviren bir alet. Printer ise, yine benzer 01 sinyallerini kafa motorunun darbelerine dönüştüren bir output cihazı.

Bir fabrikanın üç yüz kapısını kontrol eden veya bir robotun manivelelarını hareket ettiren bir motor; yüzlerce ampulü yakıp söndüren bir ışıklı tabela sistemi; gelen sinyalleri elektronik dalgalara çeviren bir radyo servisi veya ses dalgalarına çeviren bir hoparlör de output cihazları.
Bazı cihazlar da hem input, hem de output yapma imkânına sahip.

Teyp ve disk birimleri, manyetik bir ortalama kayıtlı sinyal dizilerini okuyup bilgisayara iletebiliyor, hem de bilgisayardan gelen sinyalleri manyetik ortama kaydedebiliyor. Bir modem aracılığıyla telefon cihazı da, bilgisayar sinyalleri ile telefon sinyallerini birbirine dönüştürebiliyor.
COMMODORE-64'ün, dışardan gelen sinyalleri almak ve dışarı sinyal göndermek için, sekizi dışardan görebildiğiniz, biri de içeriden klavyeye bağlı 9 kapısı bulunuyor. Bu kapılardan sinyal alma/sinyal verme işlemlerini ise VIC (Video Interface Chip), SID (Sound Interface Device), CIA I ve CIA II (Complex Interface Adaptor) isimli dört çip yürütüyor. Bunların tek işi, belleğin belli bir noktasına mikroişlemcinin yerleştirdiği dizileri kapıya iletmek ve kapıdan gelen dizileri, mikroişlemci istediğini yapsın diye belleğin belli noktalarına koymak.

PROGRAMLAMA VE PROGRAM DİLLERİ

Geldik işin püf noktasına. Bilgisayarın bir işe yarayabilmesi için, bir kapıdan gelen kodlu sinyaller dizisini, belli kurallar uyarınca, birtakım başka kodlara çevirip öbür kapıya vermesi gerekir. İşte program denilen şey, bu çevre işleminin kurallarını mikroişlemciye bildiren kodlar dizisi; bir çeşit tercüme rehberi. Örneğin "CIA1 klavye kapısından 01001010 kodunu getirirse, belleğin uygun bir yerine 10110101110101000111101011101 kodunu koy ki VIC bunu ekran kapısına göndersin; veya başka bir yere 01111 koy da printer işlesin" anlamına gelen bir kod.

Doğal olarak, programın, mikroişlemcinin anlayabileceği bir dilde olması gerekiyor. Mikroişlemcinin ise sadece makine dilinden anladığını gördük. Makine dili, de adı üstünde, insan kafasına pek uygun olmayan bir dil. Ama başka bir kurallar sistemine göre yazılmış bir programı makine diline tercüme eden programlar da mümkün. Bu programlara compiler (derleyici) veya interpreter (yorumlayıcı) adı veriliyor. Tabii işin ideali, bilgisayarı normal konuşma diliyle, örneğin Türkçe programlayabilmek. Fakat insan dilleri bilgisayar için çok karmaşık ve muğlak olduğundan makine dili ile insan dili arası ortalama diller geliştirilmiş. BASIC, Pascal, Cobol, Fortran, Logo, Lisp, Forth, C bunlardan bazıları. COMMODORE-64'ün ROM'unda, BASIC programları hemen makine diline çeviren, böylece mikroişlemcinin BASIC'ten anlamasını sağlayan bir yorumlayıcı var. Ama bu yorumlayıcıyı devreden çıkarıp doğrudan doğruya makine dilinde yazmak veya kaset ve diskette bulunan başka programlama dillerinin derleyicilerini yükleyip bu dilleri kullanmak da mümkün. Hatta derleyicisini yazmak koşuluyla kendiniz de bir programlama dili icat edebilirsiniz.

Bilgisayarınızdan yararlanmak için programlama bilmeniz tabii ki şart değil. Kasetlerde, disketlerde, kartuşlarda usta programcılarca yazılmış binlerce program var; bunları kullanabilmek için LOAD ve RUN kodlarını bilmeniz yeterli. İşin özeti, bir input bir de output cihazı ve birinin sinyallerini öbürünün verilerine çeviren iyi bir programla, COMMODORE-64'ün yapamayacağı şey yok. Dünyada bazı insanlar, birkaç düğmeden gelen kodları (input), Moskova'yı bombalayacak füzeleri kontrol eden sinyallere (output) çeviren programları yazıyorlar. Biz iyisi mi, joystick'ten gelecek kodlarla (input) ekranda Moskova'yı temsil eden ışıklı noktaların sinyallerini (output) kontrol eden programlarla yetinelim.

kaynak: Teleteknik Commodore Dergisi, Sayı 1, Mart 1986, Sayfa 12-16