Son gelişmeleri de aktarayım.
Eprom'un /E ve /G bacakları doğru bir şekilde select edilmediğinden öncesinde devre düzgün çalışmıyordu. Sonra bunu hallettim. Deneme programım sabit frekanslı bir şey çalıyordu. Çıktıdan tam emin olmak için döngü içinde frekansı değiştirip efektli bir program elde edip bunu denedim. Program devrede istediğim gibi çalışıyordu. Ancak bir sıkıntı vardı. Efekt bir kaç saniye çalıyor sonrasında ise kesiliyordu. Hatta süresi duruma göre bazen uzun bazen kısa oluyordu. Büyük ihtimalle data bus'taki contention problemi yani birden fazla cihazın data bus'a aynı anda write yapması problemini gideremedim.
En büyük problem bu arada en az problem beklenecek yerden bağlantı kablolarında çıkıyor, şöyle ki meretler yetmiyor

Hafta sonu gittim bir miktar daha aldım, onlar da yetişmedi. Artık türlü taklalar atıyorum.
Mevcut problemi tam olarak halletmemişken dur dedim ikinci test'imi yapayım. Devreye Sram de ekleyip konunun başlarında daha önce emulatör ile çalışmasını yaptığım rom'u kullanıp gerçek bir sid çalayım dedim. Bir kaç saniye de olsa çalışırsa belki sevindirik olurum diye, motivasyon olayı

Öncelikle olması gerektiği gibi eprom'u ayrı bir board'a zif sokete aldım. Onun yerine devrede sabit olacak sram'ı yerleştirdim. Bacak dizilimleri çok farklı olmadığından çok fazla uğraştırmadı.
Sonra devrenin final halinde de hafif değiştirilip kullanılabilecek bir address decoding devresi oluşturdum yine ayrı bir board'da. Led'lerle address decoding'i test ettim.
Bu konuda şurası oldukça güzel bir kaynak :
http://www.wilsonminesco.com/6502primer/index.htmlYalnız burada yaşadığım bus contention problemi ile ilgili pek bir şey bulamadım.
Address decoding kısmında AND yerine NAND kapısı kullanıldığında oluşan sinyali tekrar invert etmeye gerek kalmıyor. O yüzden sadece NAND kapıları kullandım. (Logic yazılırken Nand diye yazılmıyor ama idare edin, devre şemasını vermeye üşendim şimdi) Sebebi ise üretmeye çalıştığımız sinyal low active bir sinyal. 0 elde etmeye çalışıyoruz.
Bu arada bir not : Propagation delay'i azaltmak için logic kapıları tekrar tekrar kullanmamak gerekiyor. Yani bir yerde ürettiğiniz sonucu diğer sonucu üretmek için input olarak kullanmamak gerekiyor.
Gerçi 1Mhz için çok da bir şey farketmiyor. Bir cycle tam 1000 ns, bellek erişimi yarısında yapılıyor yani totalde 500ns süre var. Logic entegrelerin propagation delay'leri ise 15-30ns arasında. İşi abartmadıkça bir miktar cascading yapılabilir. Elimdeki sram'in erişim süresi 35-70ns aralığında. Eprom'unki 45ns. 6502'nin adresi setup zamanı vesairesi de var ancak bellek erişimi harici totalinin 430ns'lere ulaşması lazımki bana problem olsun.
RAM /CS /OE = (PHI2 NAND NOT A15) ; PHI2 sinyali 1 iken ve A15 0 iken 0 üretiyor. Diğer türlü 1. 32K ram adresliyoruz bu şekilde 0000-7FFF aralığı
EPROM /CS /OE = (A15 NAND A14 NAND A13) ; A15, A14 ve A13 bir iken 0 üretiyor. E000-FFFF arası 8K rom adresliyoruz.
SID /CS = (A15 NAND A14 NAND NOT A13 NAND A12) ; A15, A14, A12 1 ve A13 0 iken 0 üretiyor. D000-DFFF aralığında I/O adresliyoruz. Yani sid register'ları her 32 byte'da bir bu 4k'lık alanı kaplıyor. Nokta atış D400 yapmak istersek address decoding biraz karışıyor o yüzden şimdilik basit tuttum. Şu an bağlayacağım başka I/O cihaz yok zaten. C64'de bu decoding üstüne demultiplexer kullanılarak birden fazla I/O cihazı select edilmiş.
Doğruluk tablosu (Belleğe yazma PHI2 yüksek iken olduğu için 1 kabul ediyorum)
---A15/A14/A13/A12-------RAM /CS-----EPROM /CS----SID /CS
---------------------------------------------------------
0-0/0/0/0-----------------0------------1------------1----
1-0/0/0/1-----------------0------------1------------1----
2-0/0/1/0-----------------0------------1------------1----
3-0/0/1/1-----------------0------------1------------1----
4-0/1/0/0-----------------0------------1------------1----
5-0/1/0/1-----------------0------------1------------1----
6-0/1/1/0-----------------0------------1------------1----
7-0/1/1/1-----------------0------------1------------1----
8-1/0/0/0-----------------1------------1------------1----
9-1/0/0/1-----------------1------------1------------1----
A-1/0/1/0-----------------1------------1------------1----
B-1/0/1/1-----------------1------------1------------1----
C-1/1/0/0-----------------1------------1------------1----
D-1/1/0/1-----------------1------------1------------0----
E-1/1/1/0-----------------1------------0------------1----
F-1/1/1/1-----------------1------------0------------1----
Dikkat edilirse 8000 ile D000 aralığında hiç bir bölge seçilmiyor. Çünkü şu an işi basit tutmak için 32k sram kullanıyorum. Elimdeki tüm sram'ler 32k'lık.
Zaten şu anda ram ile çalışmasını da geçtim, address decoding sonrası yine sid'i D400'de gören basit efektimi çalıştırmaya çalışıyorum ama çalışmıyor. Yine bir debugging faslı geçmem gerekiyor.
Dünkü debugging faslında az kalsın 8580'i (Sid'in 9v ile de çalışabilen versiyonu) elime alıyordum. 9 voltu bir ara yanlışlıkla Vdd hattı yerine Audio out hattına bağlamışım. Sonra neyse ki C64'de denedim bir şey olmamış. Ancak gidişat proje bitene kadar en az bir kaç sid hacemat edeceğim gibi gösteriyor.
Bu arada sorun clock sinyalinin çapaklı olması, devreye yeterince akım gitmemesi (pil kullanıyorum) gibi sebepler de olabilir.
İlk iş tüm güç girişlerine birer kapasitör bağlamak olacak. Yine belki bir güç kaynağı alıp pil mevzunu ortadan kaldırmak ta en azından sorunun kaynağı noktasında bir noktayı daha ekarte etmek adına önemli olabilir.
Yine aynı şekilde clock generator devresi yerine 1mhz oscillator'ü acilen temin etmem lazım.
Devrenin son hali şu şekilde bu arada. Epey saçaklandı.

Beri yandan sid için sid datasheet'inde verilmiş implementasyon ile c64'deki uygulama arasında ciddi farklar varmış bunu farkettim. Eski sid versiyonlarında gürültü azaltmak için ferrite bead kullanılmış. 8580'i içeren uygulamada ise kaldırılmış bu, hatta sanırım 8580 için filtre bacaklarına kapasitör bağlamanın da bir esprisi yokmuş. Referans implementasyona göre en büyük fark çıkışta bir adet transistör bulunması c64'deki uygulamada. Sesin kısık olması problemini bu transistör çözecek. Bu arada çıkışa 10uF yerine 1uF kapasitör koymuşum, yüksek parazitin ana kaynağı da bu olsa gerek. Onu da değiştireceğim.