IRQHack64 api'sinin son aşamasında uzatmaları oynarken bir anda aklıma bir fikir geliverdi. Daha önce hali hazırda kafa patlattığım bir iki konu ile de birleşince gerçekten uygulanabilir olduğunu gördüm.
Daha önce kafa patlattığım dediğim aslında Neoram ile ilgili bir konuda kartuşa ram eklemeyi deneyeceğimi söylemiştim. Bu ram'in kartuş tarafından doldurulabileceğini falan.
Evet mevzu şu : Kartuşa 512K yahut 1MB statik ram ekliyoruz. (Uygun fiyatlı bulunursa 2/4MB de olabilir)
Biraz teknik konulara girelim.
Kartuş hali hazırda sd kart üstünden c64 ram'ine bir şeyler aktarabiliyor. Kartuş üstüne ek ram eklediğimizde bu ram'i yazma yapabilmek için i/o port'ları vasıtasıyla c64'e kullandırmak mümkün.
C64 üstünde bu şekilde iki i/o port'u var. $DE00-$DEFF arasındaki I/O 1 bölgesi, $DF00-$DFFF arasındaki I/O 2 bölgesi. Expansion port üstündeki R/W ve I/O1 I/O2 sinyalleri ile eklenecek statik ram'i sürmek mümkün.
Pek tabii bu şekilde her seferinde 256'şar byte olmak üzere erişim söz konusu. Burada banking devreye giriyor.
Basit olması açısından muhtemelen I/O 1 bölgesini bank switch için, I/O 2 bölgesini de ram'e yazma yapmak için kullanacağım. (Henüz final tasarım net değil)
Yazma yapılırken RAM 256'şar byte sayfalanırken. Okuma yaparken RAM'i LOW ROM ($8000-$9FFF) ve/veya ($A000-$BFFF) penceresinden okutmak mümkün. Yine burada banking gerekiyor, bunu da Easyflash uyumlu yaptığımızda aslında kartuşta EasyFlash uyumlu oyunları oynamak da mümkün olacak.
Peki orjinal IRQHack64 donanımı burada nerede devreye giriyor?
Orjinal donanım mevcut fonksiyonalitesini sağlama kısmında ve kartuş emülasyonu gerektiren oyunlar için kartuş imajını eklediğimiz sram'e atma kısmında olacak. Kabaca saniyede 40K transfer hızıyla sd karttan okunan 512K'lık bir oyun imajı 12-13 saniye gibi bir sürede ek ram'e transfer olacak. Kartuş emülasyonu noktasında IRQHack64 devreden çıkıp işi bankswitch lojiğine ve bir ROM gibi kullanılan RAM'e bırakacak.
İşin içinde statik ram olunca bunu bir batarya ile besleme de söz konusu olabilir. Hatta aynı batarya bir RTC modülünü beslemek için de kullanılabilir.
Gelelim işin pis kısmına, üstte bahsettiğim lojiği yönetmek için bir kaç latch ve bir miktar lojik entegre (yahut programmable logic) eklememiz gerekecek. SRAM çipleri de eklenince PCB'nin bu sefer ister istemez SMD komponentler için tasarlanması ihtiyacı doğuyor.
SMD yolunda bugün ilk adımımı bir adet 512K SRAM çipini SOP32 to DIP32 adaptöre lehimleyerek attım bu arada
PS: Hiç istemesem de 74244 tristate buffer'a da ihtiyacım olacak. Tahmin edin bakalım niye? (Bu sefer gerçi NoFlash64 projesinde olduğu gibi VIC ile bus konusunda savaşma gibi bir durumumuz olmayacak)