@Simon : Siz bu yazışmaları yapmasaydınız projeyi gördüğümde aklıma ilk gelen şey ilk seçilen rom'un menü olması diğerlerininse bu menüden seçilmesi idi. Siz de aynı noktaya gelmişsiniz

C64 kartuşları hakkında teferruatlı bilgim yok. Aklıma ilk gelen şey 6510 üstünde 6502'dekinden farklı olarak bulunan PA gpio pin'lerinden expansion port'un nasibini alıp almadığı oldu. Baktım yok. Metallic'in de yazdığı gibi kartuşun Adres bus'ı dinleyip spesifik bir adrese kulak kesilip oraya yazılan değeri yakalayabiliyor olması lazım. 64K eprom kullandığına göre 8 değişik değer yakalayabiliyor olman lazım. Sana 3 bit lazım.
Metallic'in yazdığı 13'lü nand arkasına latch olayı mantıklı. Yalnız pratikte de çalıştırman lazım.
Şaka maka aynı haltı geçenlerde ben de yedim. Ben önce 74165'e paralel yüklemeye çalıştım databus'taki veriyi address bus'a istediğim değer geldiği vakit. Benim durumumda koca 8k emrime amade idi sadece bir adet 3 to 8 decoder işimi gördü. Ancak bir türlü databus'taki veriyi latch'leyemedim. Muhtemelen benim devredeki bir dandikliğe gelmiş olabilir. Sonra 74373 latch ile paralel load edip paralel almaya çalıştım data bus içeriğini. O da yemedi.
En son lanet olsun dedim $8000-$9FFF arasına erişilirse 0 bilgisi göndersin 6502, $A000-$BFFF arasına erişirse 1 bilgisini göndersin. 74138 3 to 8 decoder ile bu banklara erişim anlamında çıkan sinyali arduino'nun interrupt pin'lerine gönderdim. Bu şekilde çalıştı. (Ama dediği gibi önceki kurgularım da muhtemelen doğruydu ve çalışacaktı belki de)
Yani ne yaparsan yap dene mutlaka.
MCU kullanma bence, onunla da yapılır ama gerçek sistemde çok sayıda adres pinini kontrol etmek gerekeceği için hem timing'i sorun olur hem de bir sürü i/o pin yer vesaire vesaire... MCU ancak sd kart + ram'lı devrede işe yarar.
@Metallic :
IO2/, R/W... bunlar logic 0 olmalı, bu durumda I/O adresi $DF00-$DFFF'a daraltılıyor. buradaki adresi seçmek için nand kullanılabilir çünkü nand tüm girişler 1 ise 0 üretir... Üretmek istediğimiz sinyal 0 ise adres olarak $DFFF yerine DF00 kullanılıp varsa 8 + 2 bacaklı nor kullanılabilir (var mı bilmiyorum) yahut diğer sinyallerin invert edilmesi gerekir ki bu da ekstra çip demek.
Ancak daha kolayı $DF00 ile $DFFF aralığını tek bir adres gibi görmek bence. Bu I/O alanları kartuşlara ayrılmış zaten. Tek sıkıntı çıkma durumu üstüste kartuş takılması durumu olur. O da "ben de isterem" diyecektir. Ama bizim durumumuzda sorun olacağını sanmıyorum.
Bu durumda IO2/ ve RW (Buradaki 0 olan W ile ilgileniyoruz)
Metallic, bir de şunu anlamadım wiki'de EXROM ve GAME'in de low active sinyaller olduğu yazılıyor. Yani bunlara 0 vermek lazım ki aslında zaten kartuş taktığımız için kafadan da 0 vermemiz gerekmiyor mu? Yani aslında kartuşu devre dışı çıkarmak için ihtiyaç olur ancak bunlara gibi geliyor. IO adreslerinden birinden yakalanan 3 bitlik değerden sonra düzgün bir şekilde reset çakılırsa kontrol seçilen bank'a gider gibi hali hazırda.
74LS273 yerine 4 bitlik bir latch bile yetebilir bence. databus üstünden 3 pin yakalansa yeter. Bunlar da 27C512'nin en üst adres pin'lerine beslenir. Ancak menü rom'u switching'i yaptığı noktada artık kontrol switch edilen rom'a geçer bu noktada sıçarız

Menü rom'unun kodunun 8k'lık tüm rom'larda aynalanması gerekir sıçmamak için. (Bu kısmı çözümsüz bırakıyorum şimdilik)
Menü rom'u önyüzde seçimi yaptıracak, bu seçimi 74 serisi entegrelerimiz yakalayacak... peşine menü rom'u warm reset çakacak...
Latch'lerle ilgili pratiğim sınırlı. Ancak senin söylediğin 74Ls273 ile de olur gibi.
"The DM74LS273 is an 8-bit parallel register with a common
Clock and common Master Reset. When the MR input is
LOW, the Q outputs are LOW, independent of the other
inputs. Information meeting the setup and hold time
requirements of the D inputs is transferred to the Q outputs
on the LOW-to-HIGH transition of the clock input."
https://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/16-flipflops/60-ttl/74273.htmlMR/ 0 iken hep çıkışları 0 veriyor. CP 0'dan 1'e geçerken yüklemeyi yapıyor.
Şimdi bu durumda menü seçimi ile yapılan reset sıcak reset olacağı için reset sinyali latch'i clear edemeyecek. Ancak açılıştı reset sinyali 0-1-0 şeklinde hareket ettiği için latch'i sıfırlayacak. Ancak resetin son değeri 0 olacağı için bu latch'i sürekli sıfır konumunda tutar. Bu yüzden reset sinyalinin tersini MR/'ye vermek lazım.
CP ise 0'dan 1'e geçişte aktif oluyor. Bizim sinyallerin biri (IO2/) biz ilgilenmez iken 1, diğeri de aynı şekilde 1.
Oluşturulmak istenen iki sinyal de active low olsaydı NAND kapısı işimizi görürdü. CP sinyalinde beklediğimiz değer 1 dolayısıyla işimizi görmez. (Yeterince elde olursa görür aslında tüm diğer kapılar NAND'lardan yahut NOR'lardan yapılabilir)
Neyse bu durumda NOR kullanmak lazım, NOR ve NAND kapılarının doğruluk tablosunda şöyle bir güzellik var. Girişler birbirine eşit değerde ise bu kapıların ikisi de inverter gibi çalışıyor.
Şöyle,
IO2/ NOR IO2/ = CP
RESET/ NOR RESET/ -> MR/
Kontrol edelim,
IO2/ RW/ CP
0 0 1 <- $DFxx adresine yazıldığında
0 1 0
1 0 0
1 1 0
Bu şekilde olabilir.. ancak dediğim gibi sıkıntı switching'in yapıldığı nokta. Bildiğim kadarıyla sıcak reset'te reset sinyali kullanılmıyor. Dolayısıyla bu sinyalle ancak açılışta yahut kartuş üstünde reset sinyali üreten bir devre varsa bununla latch'i sıfırlamak mümkün. Ancak program latch'i kontrol etmek için $DF00-$DFFF aralığına yazdığında diğer rom'lardan birine geçiş yapılmış olacak. Bir sonraki instruction kalınan yerden geçiş yapılan rom'dan okunacak. Kernal hala ayakta oluyor sanırım. Bu durumda diğer romlarda aynı lokasyonda kodun devam etmesi durumunda bu iş olur.
Dediğim gibi kartuş sistemi ile ilgili bilgilerim sınırlı. Belki benim yanlış bildiğim şeyler olabilir. Söz sizlerde.