C64 Türkiye sayı 2, sayfa 16

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 16

Bellek haritasına kaldığımız yerden devam ediyoruz. Aslında geçen sayıda $0000 - $FFFF adresleri arasını bitirmiştik. Fakat 0 ve 1 numaralı adreslerle $D000 - $DFFF arasında yer alan ve kısaca I/O bölgesi olarak tanınan bellek bölümünün ayrıntılı incelemesini bu sayıda yapıyoruz.

Commodore 64’te 64 Kbaytlık RAM, 8 Kbaytlık BASIC ROM, 8 Kbaytlık KERNAL ROM, 4 Kbaytlık KARAKTER ROM ve 4 Kbaytlık I/O (Giriş/Çıkış) bölgesi vardır ve bütün bunlar toplam 88 Kbaytlık bir yer kaplamaktadır. Bunlardan başka uygun donanım kullanılarak kartuş denilen parçaların da birer bellek olarak kullanıldığını hesaba katarsak sayı artacaktır. Mesela ülkemizde bilinen adıyla MULTI ICE 6 kartuşunda 32 K’lık bir EPROM ve 8 K’lık bir RAM vardır. Ayrıca 512 K’lık RAM genişletme kartuşları da bulunmaktadır. Kartuşlardaki bellekleri kullanabilmek için C64’ün hardware yapısını bilmek gerekmektedir. Bu bölümde sadece C64’ün içindeki bellek bölümlerine nasıl erişileceğini göreceğiz. C64’ün işlemcisi olan 6510 – genel amaçlı kullanılabilen 6502’nin özel bir versiyonudur – 16 bitlik adres hattıyla en fazla 64 K adresleyebilmektedir. Fakat yukarıdaki 88 K’lık bir alan nasıl oluyor da kullanılabiliyor? Bu işin sırrı 6510’un içindedir. 6502’nin özel bir versiyonu olması dolayısıyla 6510 aynı zamanda bir MMU (Memory Management Unit – Bellek Yönetim Birimi) olarak kullanılmaktadır. Normal şartlarda RAM’da yer alması gereken 0 ve 1 numaralı adresler işlemci tarafından kendi içindeymiş gibi kullanılır. Bu iki adresten 0 numaralı olanı veri yön portu olup 1 numaralı adresin hangi bitlerinin giriş veya çıkış olarak kullanılacağını düzenler. Şöyle bir örnek verelim. 1 numaralı adresin bitlerini kapı olarak düşünün. 0 numaralı adres bu kapıların hangilerinden çıkış, hangilerinden giriş yapılacağına karar verir. 1 numaralı adres ise bu kapıların açık veya kapalı olacağını belirler. 0 numaralı adres yani VERİ YÖN PORT’u işlemcinin içinde olup dışarıyla bağlantısı yoktur. 1 numaralı adres ise KONTROL PORT’udur ve 6 adet çıkış ile C64’ün içindeki diğer yerlere bağlıdır. VERİ YÖN PORT’unda 47 ($2F) değeri bulunmaktadır ve bu ikili sistemde %101111’dir. Burada “1”ler çıkış, “0”lar giriş olarak tanımlanmıştır. Buna göre 1 numaralı adresin 0, 1, 2, 3 ve 5 numaralı bitleri çıkış, 4 numaralı biti ise giriş olarak kullanılmaktadır. C64’te bellek düzenleme işleminde 1 numaralı adresin 0, 1 ve 2 numaralı bitleri kullanılır. Diğer bitler ise teyp ile yapılan işlemlerde kullanılır. Şimdi bunları inceleyelim.

İSİM BİT YÖN AÇIKLAMA LORAM 0 ÇIKIŞ $A000 - $BFFF (BASIC) arasındaki RAM / ROM için kontrol. HIRAM 1 ÇIKIŞ $E000 - $FFFF (KERNAL) arasındaki RAM / ROM için kontrol. CHAREN 2 ÇIKIŞ $D000 - $DFFF arasında yer alan Giriş / Çıkış yada ROM için kontrol. 3 ÇIKIŞ Kasete yazma hattı. 4 GİRİŞ Teyp anahtarı duyumu. 5 ÇIKIŞ Teyp motor kontrolü.

1 numaralı adresin normal açılış değeri $37 (55) olup bizi ilgilendiren ilk üç bit için konuşursak, C64 ilk açıldığında BASIC ROM; KERNAL ROM ve GİRİŞ / ÇIKIŞ bölgesi seçilmiş durumdadır. Yani LORAM; HIRAM ve CHAREN bitleri ilk açılışta “1”dir.

Eğer LORAM bitini “0” yaparsanız artık BASIC ROM devreden çıkar ve yerine aynı adreslerdeki RAM kullanılabilir hale gelir. BASIC programlama ile ilgilenmiyorsanız ve daha çok assembler kullanıyorsanız 8 K’lık bir bölge kazancınız olacaktır. Eğer HIRAM bitini “0” yaparsanız anında bilgisayarın kilitlendiğini göreceksiniz. Çünkü KERNAL ROM’da bulunan ve C64’ün çalışmasını sağlayan rutinler devre dışı kalacak ve işlemci o rutinlerin yer aldığı adreslerde RAM boş olduğu için ne iş yapacağını bilemeyecektir. Bu nedenle eğer HIRAM’ı “0” yapacaksanız – ki ancak makine diliyle olacağı için- değişiklikten önce SEI komutuyla interrupt’ları durdurmanız gerekmektedir. Son olarak CHAREN bitini “0” yaparsanız artık I/O çiplerine –görüntü, ses vb.– erişemez fakat KARAKTER ROM’unu okuyabilirsiniz. Böylece C64’ün orijinal karakterlerini RAM’a aktarıp üstünde değişiklik yapabilirsiniz.

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