BELLEK HARİTASI – 2

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.

Şimdi gelelim önemli bir konuya.... Eğer LORAM, HIRAM ve CHAREN’in hepsini “0” yaparsanız ne olur?. Bunu yaparsanız artık $D000 - $DFFF arasındaki RAM’ı kullanabilir hale gelirsiniz. Ayrıca BASIC ve KERNAL ROM’ları devre dışı kalacağından C64’e adını veren 64 K RAM tamamen kullanıma açılmış olur. Fakat hiçbir giriş / çıkış işlemi yapılamayacağından ne işinize yarayacağını bilemem. C64 normal bellek durumundayken BASIC ve KERNAL ROM adreslerine yapılacak bir POKE işlemiyle veri ROM’a değil RAM’e yazılacaktır. Zaten isteseniz de ROM’a bir şey yazamazsınız. Çünkü ROM’un Türkçesi YALNIZ OKUNABİLİR BELLEK’tir. Eğer PEEK komutuyla bir okuma işlemi yaparsanız elde edeceğiniz değer RAM’daki değil ROM’daki değerdir. Çünkü öncelik ROM’dadır. 1 numaralı adresi istediğiniz gibi kullanabilirsiniz ama dikkatli olmak şartıyla. Dergimizin ilk sayısında yer alan MAKİNE DİLİ EDİTÖRÜ çalışırken BASIC ROM altındaki RAM’de bulunur. Eğer MDE çalışırken bilgisayarı resetlerseniz aşağıdaki 5 komutu yazarak MDE’yi tekrar kullanabilirsiniz. POKE 40956, 169 POKE 40957, 54 POKE 40958, 133 POKE 40959, 1 SYS 40956 Eğer 1 numaralı adresin içeriğinin $37 olduğundan eminseniz, POKE 40958, 198 POKE 40959, 1 SYS 40958 komutlarını yazmanız yeterlidir. İlk dört POKE komutlarının assembler karşılığı şöyledir. LDA #$36 STA $01 Son iki POKE komutunun assembler karşılığı ise DEC $01 komutudur. Bu iki adresten sonra sıra I/O bölgesi dediğimiz adreslere geldi. Genel bir ifadeyle $D000 - $DFFF adresleri arasında bulunan bu bölgede C64’ün görüntü işlemlerinden sorumlu VIC, ses işlemlerinden sorumlu SID, ekranda gördüğünüz renkler için kullanılan COLOR RAM, her türlü klavye, joystick, zamanlayıcı, kaset ve disket işlemlerinden sorumlu CIA1 ve CIA2 ile tamamen kullanıcıya ayrılmış durumda olan ve genellikle hardware için kullanılan IO1 ve IO2 bölgeleri vardır. Bazı kartuşlar bu adresleri kullanır. Eğer elektronik bilginiz varsa bu I/O1 ve I/O2 bölgelerini kullanarak bir takım devreler yapabilirsiniz. Aşağıdaki tabloda her çipin yer aldığı adresleri göreceksiniz.

İSİM GERÇEK İSMİ ADRESİ GERÇEK ADRESİ VIC Video Interface Controller $D000 - $D3FF $D000 - $D02E SID Sound Interface Device $D400 - $D7FF $D400 - $D41C COLOR RAM COLOR RAM $D800 - $DBFF $D800 - $DBE7 CIA1 Complex Interface Adapter 1 $DC00 - $DCFF $DC00 - $DC0F CIA2 Complex Interface Adapter 2 $DD00 - $DDFF $DD00 - $DD0F I / O 1 Input / Output 1 $DE00 - $DEFF $DE00 - $DEFF I / O 2 Input / Output 2 $DF00 - $DFFF $DF00 - $DFFF Tabloda iki ayrı adres görüyorsunuz I/O çiplerinin gerçek çalışma adresleri en sondaki sütundaki değerlerdir. C64’ü tasarlayanlar öyle bir iş yapmış ki mesela ekranın dış rengi için kullanılan $D020 adresi yerine $D220 yazarsanız ekran rengi yine değişecektir. Bu durumda siz SHADOW REGISTER kullanmış oluyorsunuz. Yani yazdığınız adreste gerçekte hiçbir şey yoktur. Programlarınızda ilginçlik olsun diye kullanabilirsiniz. VIC çipinin registerleri her 64 adreste bir kendini tekrarlar. Yani $D020 yerine $D020 + 64 + 64 +...... kullanabilirsiniz. $D020 için kullanabileceğiniz en son adres $D3E0 olacaktır. Aynı tekrarlama SID çipi için 32 adrestir. CIA1 ve CIA2 çiplerinin registerleri ise her 16 adreste bir tekrarlanır. Yukarıdaki gereksiz bilgilerden sonra artık gerçek adresleri incelemeye başlayabiliriz.

ADRES HEX DEC

BİT

AÇIKLAMA $D000 -

$D02E

53248 - 54271 MOS 6569 VIC ( VIDEO INTERFACE CONTROLLER ) $D000 53248 0 Numaralı SPRITE için X koordinatı değeri. $D001 53249 0 Numaralı SPRITE için Y koordinatı değeri. $D002 53250 1 Numaralı SPRITE için X koordinatı değeri. $D003 53251 1 Numaralı SPRITE için Y koordinatı değeri. $D004 53252 2 Numaralı SPRITE için X koordinatı değeri. $D005 53253 2 Numaralı SPRITE için Y koordinatı değeri. $D006 53254 3 Numaralı SPRITE için X koordinatı değeri. $D007 53255 3 Numaralı SPRITE için Y koordinatı değeri. $D008 53256 4 Numaralı SPRITE için X koordinatı değeri. $D009 53257 4 Numaralı SPRITE için Y koordinatı değeri. $D00A 53258 5 Numaralı SPRITE için X koordinatı değeri. $D00B 53259 5 Numaralı SPRITE için Y koordinatı değeri. $D00C 53260 6 Numaralı SPRITE için X koordinatı değeri. $D00D 53261 6 Numaralı SPRITE için Y koordinatı değeri. $D00E 53262 7 Numaralı SPRITE için X koordinatı değeri. $D00F 53263 7 Numaralı SPRITE için Y koordinatı değeri. $D010 53264 SPRITE’lar için 256’dan büyük X koordinatlarının ESB biti. Her bit bir sprite’a ayrılmıştır. Mesela 0 numaralı bit 0 numaralı SPRITE içindir. $D011 53265 VIC control registeri. 7 Raster karşılaştırması 8. Bit. ( $D012’ye bakınız) 6 Extented Color Mode : 1=Enable 0=Disable 5 Bit Map Mode : 1=Enable 0=Disable 4 Ekran açık / kapalı : 1=Açık 0=Kapalı 3 24 / 25 satır seçimi : 0=24 Satır 1=25 Satır 2-0 Y pixel konumuna (0-7) düz kaydırma $D012 53266 Karşılaştırma IRQ’su için raster değeri okuma / yazma $D013 53267 LIGHT PEN latch X konumu $D014 53268 LIGHT PEN latch Y konumu $D015 53269 Sprite Gösterme biti. Her bit bir sprite’a ayrılmıştır. Hangi bit “1” ise o bit’e ait sprite belirlenmiş koordinatlarda ekranda gözükür. $D016 53270 VIC kontrol registeri. 7-6 Kullanılmıyor. 5 BU BİTİ DAİMA “0” YAPIN!! 4 Multi Color Mode : 1=Enable 0=Disable 3 38 / 40 kolon seçimi : 0=38 Kolon 1=40 Kolon 2-0 X konumuna düz kaydırma $D017 53271 Sprite’ları Y yönünde büyütme. Her bit bir Sprite için kullanılır. Hangi bit “1” ise o bit’e ait Sprite Y yönünde 2 kat büyük gösterilir. $D018 53272 VIC bellek kontrol registeri 7-4 Ekran belleği taban adresi (VIC’in içinde) 3-0 Karakter seti taban adresi (VIC’in içinde) $D019 53273 VIC interrupt bayrağı registeri. 7 Herhangi bir açık IRQ koşulunda “1” olacak. 6-4 Kullanılmıyor. 3 LIGHT PEN interrupt bayrağı 2 Sprite-Sprite çarpışması interrupt bayrağı 1 Sprite-Karakter çarpışması interrupt bayrağı. 0 Raster karşılaştırma interrupt bayrağı. $D01A 53274 İnterrupt önleme registeri. Hangi interrupt kullanılacaksa ilgili bit “1” yapılmalıdır. Mesela Raster interruptı için 0 numaralı bit “1” olmalıdır. $D01B 53275 Sprite – karakter gösterme önceliği. Her bit bir Sprite’a ayrılmıştır. Hangi bit “1” ise o bite ait Sprite karakterlerin önünde gözükür. $D01C 53276 Sprite Multi Color Mode seçimi. Hangi bit “1” ise o bite ait Sprite Multi Color olarak gösterilir. $D01D 53277 Sprite’ları X yönünde büyütme. Her bit bir Sprite için kullanılır. Hangi bit “1” ise

ise o bit’e ait Sprite X yönünde 2 kat büyük gösterilir. $D01E 53278 Yaratıklar arası çarpışmanın algılanması. $D01F 53279 Yaratık – zemin çarpışmasının algılanması. $D020 53280 Çerçeve rengi. $D021 53281 Zemin rengi 0. $D022 53282 Zemin rengi 1. $D023 53283 Zemin rengi 2. $D024 53284 Zemin rengi 3. $D025 53285 Multi Color Sprite’lar için renk registeri 0. $D026 53286 Multi Color Sprite’lar için renk registeri 1. $D027 53287 0. Sprite için renk registeri. $D028 53288 1. Sprite için renk registeri. $D029 53289 2. Sprite için renk registeri. $D02A 53290 3. Sprite için renk registeri. $D02B 53291 4. Sprite için renk registeri. $D02C 53292 5. Sprite için renk registeri. $D02D 53293 6. Sprite için renk registeri. $D02E 53294 7. Sprite için renk registeri. VIC denilen çip aklınızın ucundan bile geçmeyecek demo tekniklerinin baş sorumlusudur. $D011 - $D012 - $D016 - $D018 registerleri bir araya geldi mi VIC’i kimse tutamaz. ☺☺☺ Sırada C64’ün mükemmel seslerinden sorumlu olan SID çipi var.

ADRES HEX DEC

BİT

AÇIKLAMA $D400 -

$D41F

54272 – 54300 MOS 6581 SID (SOUND INTERFACE DEVICE) $D400 54272 SES 1 : Frekans kontrolü küçük basamak baytı. $D401 54273 SES 1 : Frekans kontrolü büyük basamak baytı. $D402 54274 SES 1 : Darbe Dalga Genişliği küçük basamak baytı. $D403 54275 7-4 Kullanılmıyor. 3-0 SES 1 : Darbe Dalga Genişliği üst yarım bayt. $D404 54276 SES 1 : Kontrol registeri. 7 Rastgele Gürültü Dalga Biçimi, 1 = ON 6 Darbe Dalga Biçimi, 1 = ON 5 Testere Dişi Dalga Biçimi, 1 = ON 4 Üçgen Dalga Biçimi, 1 = ON 3 Test Bit’i : 1 = Osilatör 1’in çalışmasını durdurur. 2 Osilatör 1 ile Osilatör 3’ün modüle edilmesi, 1 = ON 1 Osilatör 1 ile Osilatör 3 frekanslarının eşzamanlı hale getirilmesi 1 = ON 0 Geçit Biti : 1 = Yükselme / Düşme / Durma durumu dizisine başlama, 0 = Kaybolma durumuna geçiş. $D405 54277 Envelope Üreteci 1 : Yükselme / Düşme Döngü Kontrolü 7-4 Yükselme döngüsü süresi seçimi : 0 – 15 3-0 Düşme döngüsü süresi seçimi : 0 – 15 $D406 54278 Envelope Üreteci 1 : Durma / Kaybolma Döngü Kontrolü 7-4 Durma döngüsü süresi seçimi : 0 – 15 3-0 Kaybolma döngüsü süresi seçimi : 0 – 15 $D407 54279 SES 2 : Frekans kontrolü küçük basamak baytı. $D408 54280 SES 2 : Frekans kontrolü büyük basamak baytı. $D409 54281 SES 2 : Darbe Dalga Genişliği küçük basamak baytı. $D40A 54282 7-4 Kullanılmıyor. 3-0 SES 2 : Darbe Dalga Genişliği üst yarım bayt. $D40B 54283 SES 2 : Kontrol registeri. 7 Rastgele Gürültü Dalga Biçimi, 1 = ON 6 Darbe Dalga Biçimi, 1 = ON 5 Testere Dişi Dalga Biçimi, 1 = ON

4 Üçgen Dalga Biçimi, 1 = ON 3 Test Bit’i : 1 = Osilatör 2’nin çalışmasını durdurur. 2 Osilatör 2 ile Osilatör 1’in modüle edilmesi, 1 = ON 1 Osilatör 2 ile Osilatör 1 frekanslarının eşzamanlı hale getirilmesi 1 = ON 0 Geçit Biti : 1 = Yükselme / Düşme / Durma durumu dizisine başlama, 0 = Kaybolma durumuna geçiş. $D40C 54284 Envelope Üreteci 2 : Yükselme / Düşme Döngü Kontrolü 7-4 Yükselme döngüsü süresi seçimi : 0 – 15 3-0 Düşme döngüsü süresi seçimi : 0 – 15 $D40D 54285 Envelope Üreteci 2 : Durma / Kaybolma Döngü Kontrolü 7-4 Durma döngüsü süresi seçimi : 0 – 15 3-0 Kaybolma döngüsü süresi seçimi : 0 – 15 $D40E 54286 SES 3 : Frekans kontrolü küçük basamak baytı. $D40F 54287 SES 3 : Frekans kontrolü büyük basamak baytı. $D410 54288 SES 3 : Darbe Dalga Genişliği küçük basamak baytı. $D411 54289 7-4 Kullanılmıyor. 3-0 SES 3 : Darbe Dalga Genişliği üst yarım bayt. $D412 54290 SES 3 : Kontrol registeri. 7 Rastgele Gürültü Dalga Biçimi, 1 = ON 6 Darbe Dalga Biçimi, 1 = ON 5 Testere Dişi Dalga Biçimi, 1 = ON 4 Üçgen Dalga Biçimi, 1 = ON 3 Test Bit’i : 1 = Osilatör 3’ün çalışmasını durdurur. 2 Osilatör 3 ile Osilatör 2’nin modüle edilmesi, 1 = ON 1 Osilatör 3 ile Osilatör 2 frekanslarının eşzamanlı hale getirilmesi 1 = ON 0 Geçit Biti : 1 = Yükselme / Düşme / Durma durumu dizisine başlama, 0 = Kaybolma durumuna geçiş. $D413 54291 Envelope Üreteci 3 : Yükselme / Düşme Döngü Kontrolü 7-4 Yükselme döngüsü süresi seçimi : 0 – 15 3-0 Düşme döngüsü süresi seçimi : 0 – 15 $D414 54292 Envelope Üreteci 3 : Durma / Kaybolma Döngü Kontrolü 7-4 Durma döngüsü süresi seçimi : 0 – 15 3-0 Kaybolma döngüsü süresi seçimi : 0 – 15 $D415 54293 Filtrenin Geçiş Frekansı : Alt Yarım Bayt (2-0 bit’ler) $D416 54294 Filtrenin Geçiş Frekansı : Büyük Basamak Baytı $D417 54295 Filtrenin salınım (Rezonans) kontrolü / Ses giriş kontrolü 7-4 Filtre salınımı seçimi : 0 – 15 3 Filtreye dışarıdan giriş : 1 = Evet 0 = Hayır 2 Ses 3 filtre çıkışı : 1 = Evet 0 = Hayır 1 Ses 2 filtre çıkışı : 1 = Evet 0 = Hayır 0 Ses 1 filtre çıkışı : 1 = Evet 0 = Hayır $D418 54296 Filtre Mod ve Volüm Seçimi 7 Ses 3 çıkışı kesimi : 1 = OFF 0 = ON 6 Yüksek frekans geçişli filtre modu seçimi, 1 = ON 5 Orta frekans geçişli filtre modu seçimi, 1 = ON 4 Alçak frekans geçişli filtre modu seçimi, 1 = ON 3-0 Çıkış ses volüm seçimi : 0 – 15 $D419 54297 Analog Dijital çevirici : Game Paddle 1 (0 – 255) $D41A 54298 Analog Dijital çevirici : Game Paddle 2 (0 – 255) $D41B 54299 Osilatör 3 rastgele sayı üreteci $D41C 54300 Ses üreteci 3 çıkışı $DC00 -

$DC0F

56320 – 56335 MOS 6526 CIA #1 ( COMPLEX INTERFACE ADAPTER #1 ) $DC00 56320 Veri portu A (Klavye, Joystick, Paddles, Light-Pen) 7-0 Klavye taraması için, klavye kolon değerleri yazımı 7-6 Port A/B ‘de bulunan paddle’ların okunması. (01=Port A, 10=Port B) 4 Joystick A ateş düğmesi : 1= Ateşe basıldı 3-2 Paddle ateş düğmeleri

3-0 Joystick A yönü (0-15) $DC01 56321 Veri portu B (Klavye, Joystick, Paddles) Oyun Port’u 1 7-0 Klavye taraması için, klavye sıra değerleri okuması 7 B zamanlayıcısı : Toggle / Vuruş çıkışı 6 A zamanlayıcısı : Toggle / Vuruş çıkışı 4 Joystick 1 ateş düğmesi : 1= Ateşe basıldı 3-2 Paddle ateş düğmeleri 3-0 Joystick 1 yönü (0-15) $DC02 56322 Veri yön registeri – Port A (56320) $DC03 56323 Veri yön registeri – Port B (56321) $DC04 56324 Zamanlayıcı A : Alt Bayt $DC05 56325 Zamanlayıcı A : Yüksek Bayt $DC06 56326 Zamanlayıcı B : Alt Bayt $DC07 56327 Zamanlayıcı B : Yüksek Bayt $DC08 56328 Gün zamanı saati : 1 / 10 saniye $DC09 56329 Gün zamanı saati : Saniye $DC0A 56330 Gün zamanı saati : Dakika $DC0B 56331 Gün zamanı saati : Saat + Öğleden önce / Öğleden sonra (AM/PM) bayrağı (Bit 7) $DC0C 56332 Eş zamanlı veri G / Ç veri tamponu $DC0D 56333 CIA kesinti kontrol registeri (IRQ okuması / önleme yazımı) 7 IRQ Bayrağı (1=IRQ oldu) / IRQ yap/yapma bayrağı 4 Bayrak 1 IRQ (Kaset okuması / Seri bağlantı SRQ girişi) 3 Seri bağlantı interrupt’ı 2 Gün zamanı saati interrupt’ı 1 B zamanlayıcısı interrupt’ı 0 A zamanlayıcısı interrupt’ı $DC0E 56334 CIA kontrol register A 7 Gün zamanı saati frekansı : 1 = 50 Hz 0 = 60 Hz 6 Seri port G / Ç modu : 1 = Çıkış 0 = Giriş 5 A zamanlayıcısı sayımı : 1 = CNT sinyalleri 0 = Sistem φ2 saati 4 A zamanlayıcısı da yüklenecek mi ? 1 = Evet 3 A zamanlayıcısı çalışma modu : 1 = 1 vuruşluk 0 = Sürekli 2 A zamanlayıcısının PB6’ya çıkış modu 1 = Toggle 0 = Vuruş 1 A zamanlayıcısının PB6’daki çıkışı 1 = Evet 0 = Hayır 0 A zamanlayıcısının başlaması / durması : 1 = Başlama 0 = Durma $DC0F 56335 CIA kontrol register B 7 Alarm / TOD saati kurmak 1 = Alarm 0 = Saat 6-5 B zamanlayıcısının mod seçimi 00 : Sistem φ2 saat vuruşu sayımı 01 : Pozitif CNT geçişi sayımı 10 : A zamanlayıcısı “Underflow” vuruşu sayımı 11 : CNT pozitif iken A zamanlayıcısı underflow sayımı 4-0 B zamanlayıcısı için CIA kontrol register’i A’nın aynısı $DD00-

$DD0F

56576- 56591 MOS 6526 CIA #2 ( COMPLEX INTERFACE ADAPTER #2 ) $DD00 56576 Veri Port’u A (Seri bağlantı RS-232, VIC Bellek kontrolü) 7 Seri bağlantı veri girişi 6 Seri bağlantı saat vuruşu girişi 5 Seri bağlantı veri çıkışı 4 Seri bağlantı saat vuruşu çıkışı 3 Seri bağlantı ATN çıkış sinyali 2 RS-232 Veri çıkışı (Kullanıcı Port’u) 1-0 VIC Çip’i sistem bellek bankası seçimi (Default = 11) $DD01 56577 Veri Port’u B (Kullanıcı Port’u, RS-232) 7 Kullanıcı / RS-232 Teyp hazır 6 Kullanıcı / RS-232 Gönderime hazır 5 Kullanıcı

4 Kullanıcı / RS-232 Taşıyıcı tarama 3 Kullanıcı / RS-232 Halka göstergeç 2 Kullanıcı / RS-232 Veri terminali hazır 1 Kullanıcı / RS-232 Gönderim isteği 0 Kullanıcı / RS-232 Alınmış veri $DD02 56578 Veri yön register’i : Port A $DD03 56579 Veri yön register’i : Port B $DD04 56580 A zamanlayıcısı alt bayt $DD05 56581 A zamanlayıcısı üst bayt $DD06 56582 B zamanlayıcısı alt bayt $DD07 56583 B zamanlayıcısı üst bayt $DD08 56584 Gün saati : 1/10 saniye $DD09 56585 Gün saati : saniye $DD0A 56586 Gün saati : dakika $DD0B 56587 Gün saati : saat + AM/PM bayrağı (bit 7) $DD0C 56588 Eş zamanlı Seri G/Ç veri tamponu $DD0D 56589 CIA interrupt kontrol register’i (NMI okuma/yazma maskesi) 7 NMI bayrağı (1=NMI oluşumu) / 1-0 bayrağı ??? 4 FLAG1 NMI ( Kullanıcı / RS-232 ) alınmış veri girişi 3 Seri Port İnterrupt’ı 1 B zamanlayıcısı interrupt’ı 0 A zamanlayıcısı interrupt’ı $DD0E 56590 CIA Kontrol Register A 7 Gün saati frekansı : 1 = 50 Hz 0 = 60 Hz 6 Seri Port G/Ç modu : 1 = Çıkış 0 = Giriş 5 A zamanlayıcısı sayacı : 1 = CNT sinyali 0 = Sistem φ2 saati 4 A zamanlayıcısına zorunlu yükleme : 1 = Evet 3 A zamanlayıcısına RUN modu : 1 = Tek atış 0 = Devamlı 2 PB6’da A zamanlayıcısı Çıkış Modu : 1 = Toggle 0 = Vuruş 1 PB6’da A zamanlayıcısı Çıkışı : 0 = Evet 1 = Hayır 0 A zamanlayıcısı Başlatma / Durdurma : 1 = Başlatma 0 = Durdurma $DD0F 56591 CIA kontrol register B 7 Alarm / TOD saatini tanımla 1 = Alarm 0 = Saat 6-5 B zamanlayıcısının mod seçimi 00 : Sistem φ2 saat vuruşlarını say 01 : Pozitif CNT geçişlerini say 10 : A zamanlayıcısı “Underflow” vuruşlarını say 11 : CNT pozitif iken A zamanlayıcısı underflow’larını say $DE00-

$DEFF

56832- 57087 I/O 1 Gelecekteki G/Ç genişlemeleri için ayrılmıştır. $DF00-

DFFF

57088- 57343 I/O 2 Gelecekteki G/Ç genişlemeleri için ayrılmıştır. I/O1 ve I/O2 denilen adres bölgelerini kullanarak C64’e yeni donanımlar eklenebilir. Bu donanımlar C64’e EXPANSION PORT’tan takılır. Bazı hızlandırıcı kartuşlar mesela -MULTI ICE 6 kendi üstündeki 32 K EPROM ve 8 K RAM’i seçmek için IO1 ve IO2 bölgesini kullanır. C64’e Harddisk ve CD-ROM bağlamanızı sağlayan IDE64 isimli kartuş, REU (Ram Expansion Unit), Z80 kartuşu, çeşitli MIDI interface kartuşları hep bu bölgeleri kullanır. Eğer elektronik (dijital) bilginiz varsa bu bölgeleri kullanarak Analog / Dijital, Dijital / Analog Çeviriciler, Röle Kontrol Devreleri, Eprom Programlayıcılar vs. yapabilirsiniz. Böyle bir işe kalkışmadan önce yanlış bir bağlantı sonucu C64’ünüzün çöpe gidebileceğini unutmayın. C64’e yeni donanım eklemek için USER PORT’u hatta JOYSTICK PORT’larını bile kullanabilirsiniz. Eğer joystick portlarını kullanırsanız klavyeyi kullanamayabilirsiniz.. Çünkü joystick portları ile klavye aynı adresleri kullanır. Yapacağınız donanımı programla kontrol edeceğiniz için bu sorunu halledebilirsiniz. Hangi port’u kullanırsanız kullanın iyi bir elektronik bilgisine sahip olmanız gerekir. Eğer yaptığınız ve çalışır projeler varsa dergiye gönderebilirsiniz.