Merak etme Skate. Hayalindeki projeyi gerçekleştirmeye başlamana az kaldı. Borçlarım biraz hafifleyince 2006'nın ikinci çeyreğinde hardware projemin PCB'sini yaptıracağım ve beraber kod kasacağız. Projemin PCB çizimi hazır ama numune bir pcb yaptırmak için 100€+KDV'yi gözden çıkarmam gerekiyor. 3-4 ay içinde bu extra harcamayı yapacak durumum yok. Neyse projemin genel yapısı şöyle.
Yazacaklarım biraz karışık olabilir şimdiden söyleyeyim.
$DE00-$DEFF (veya bir jumper ile $DF00-$DFFF) arası her biri 16 byte genişliğinde bir bölgeyi adreslemekte kullanılacak 16 adet /CS işaretine ayrılıyor. İlk /CS işareti ($DE00-$DE0F) projedeki hardware'i kontrol etmek için kullanılıyor. Geri kalan $DE10-$DEFF arasına ait 15 adet /CS işareti bir konnektöre taşınıyor. Konnektörde ayrıca D0...D7 data bus, A0..A3 adres bus (16 byte adresleyebilmek için), R/WR, /RST, phi2 gibi işaretler bulunmakta. Dolayısı ile bu konnektör üzerinden adreslenebilir birçok hardware eklentisi yapılabilir.
$DE00-$DE0F arasının ayrıntılarına geçmeden önce kart üzerinde neler var yazayım.
512K'lık SRAM
512K'lık FLASH EPROM
RTC
RTC için 4 digitlik display (güzel bir software ile disk access sırasında track/sector bilgileri, hex olarak programın start-end adresleri ve uzunluğu vs. gösterilerbilir. Hatta yeni bir OS ile disket BAM üzerinde uygun bir yere file date, time bilgileri vs. kaydedilip c64 tarafında bu bilgiler okunup displayde gösterilebilir)
3x8 bitlik Input/Output port (LCD display bağlanabilir, PC interface yapılabilir vs..)
Yukarıdakilerin kontrolu için 2 adet 82C55 entegre.
8 bitlik IDE interface ayrıca ileride MMC/SD card bağlantısı için kullanmak üzere bir kaç port.
Gelelim bütün bunları nasıl adreslendiğine. Önce biraz teori tabiiki
1 : expansion slotdaki /XROM hattı lojik "0" yapılırsa bağlanırsa C64 $8000-$9FFF arasını kartuş bölgesi olarak ayırır ve expansion slotdaki /ROML hattını lojik "0" seviyesine çeker. Böylece expansion slota takılmış olan bir hardware kontrol edilebilir.
2 : $DE00-$DEFF veya $DF00-$DFFF arasındaki bir adrese yapılacak okuma/yazma işlemi sırasında expansion slotdaki /IO1 veya /IO2 hatları lojik "0" yapılır.
Yukarıdaki iki teoriyi bildikten sonra C64 için yeni hardware tasarlamak basitleşir.
Şİmdi Ayrıntılar....
$DE00-$DE03 : 1. 82C55 entegresinin registerleri (1 tane kontrol, 3 tane port registeri vardır)
PORT A :
bit 0 : A13 adres hattı
bit 1 : A14
bit 2 : A15
bit 3 : A16
bit 4 : A17
bit 5 : A18
Yukarıdaki 6 bit ile Flashın veya Sram'ın adres hatlarını kontrol ederek 512K yı 8K'lık 64 adet BANK olarak seçebiliyoruz ve seçtiğimiz Bank $8000-$9FFF arasında aktif oluyor. (bu seçme işlemini c64'te başka bir adreste çalışan -alt- rutin ile yapmak lazım)
bit 6 : Eprom / sram select
bit 6 "0" ise eprom, "1" ise ram seçiliyor.
bit 7 : Card memory disable/enable
bit 7 "0" ise $8000-$9FFF arası normal şeklinde C64'e ait, "1" ise kart üzerindeki memorye ayrılıyor.
bit 7'nin kullanılması biraz sorun çıkarabilir. Zira "0" yaptığımızda /XROM hattı "1" yapılıyor ve dolayısı ile /ROML hattı "1" oluyor. Bunun sonucunda kart üzerindeki eprom/ram devre dışı kalmış oluyor. Eğer o anda flash veya sram üzerinde bir program çalışıyorsa c64 kilitlenebilir. Eski haline getirmek için c64'ün resetlenmesi (korkmayın kart üzerine reset buton var
gerekiyor. Eğer normal olarak çıkıldıysa bir poke komutu ile flashı veya sram'ı istenilen bank seçilerek aktif hale getirmek mümkün. (POKE PORT_A,128 ile flash bank 0 aktif yapılabilir). flash veya sram disable olsa bile c64'e yüklenecek başka programlar ile kendi rutinlerinizle rtc, ide vs. kullanmaya devam edebilirsiniz.
PORT B :
RTC ve diğer bilgileri göstereceğimiz display için segment data çıkışları
PORT C :
bit 0 ve bit 1 display için multiplex display scan çıkışları.
bit 2 : RTC entegresi için /RTS çıkışı. "0" olusa rtc'ye erişim yapılabilir.
bit 3 : RTC için /SCL çıkışı
NOT : bit 2 ve bit 3 yer değiştirmiş olabilir. Aklımda yanlış kalmış olabilir.
bit 4 : RTC için /SDA bağlantısı. Bağlantının yönü RTC'ye erişim sırasında yani read/write durumuna göre 82C55'in kontrol registeri ile değiştirilrcek.
bit 5-6-7 : gelecekteki uygulamalar için kart kenarında bir konnektöre taşınmış durumda. Aynı zamanda /SCL ve /SDA hatlarıda aynı konnektöre taşınmış durumda. Bu konnektördeki bağlantılarla MMC/SD kart interface tasarlanabilir.
$DE04-$DE07 : 2. 82C55 entegresinin registerleri.
Tamamen kullanıcıya bırakılmış 3 adet 8 bitlik IO portu var ve bunlarla LCD display vs. bağlantısı yapılabilir.
$DE08-$DE0F :
8 bitlik ide interface bölgesi.
Bayramdan önce işyerinde PCB'yi basmayı denedim olmadı. İncecik yollar ve çift taraflı olması işimi zorlaştırdı. Ancak 3-5 ay sonra ilk prototipi yaptırınca code kasacağım. HI3S elemanlarından Shadow'un User porttan yaptığı ve çalıştırdığı RTC devresinin codeları elimde.
Multiplex display scan rutini basit. Tek zorlanacağım konu flash eproma yazma rutini gibi gözüküyor.
C64 açıldığında ekranda bir menü olacak. Menüde flash içine save edilen programların isimleri olacak ve seçilen program hangi banka save edildiyse oradan okunup C64'eün asıl belleğine aktarılacak. 0. Bankta bir tür bios olacak-rtc setup, ide access, flashın diğer banklarına program save etmek vs.. tool ler bulunacak.
Şimdi bu kart ile ilgili olarak hayallerinizi serbest bırakın.
Skate sen şimdiden başla bir OS kodlamaya.