Oku oku nereye kadar Garth Wilson amcamızla tanışma zamanı geldi diye düşündüm ve 6502.org'a kayıt oldum.
http://forum.6502.org/viewtopic.php?f=4&t=3378Prototip board'larımı apartman modeli dizip çalışmadığını görünce lan bunları test edebilmek lazım düşüncesi ile arayışa girdim. Önce şu aralar çok sevdiğim 74165 parallel input serial output shift register'ı 6502'ye memory mapped IO device olarak gösterebilir miyim diye biraz uğraştım. Artık yazılımı mı buglı yazdım, epromu mu düzgün yazamadım yoksa devreyi kurarken dikkatsiz mi davrandım bilmiyorum (bu üçünden biri olduğuna %99 eminim) beklediğim sonucu alamadım.
Yapmak istediğim şu : Benim devre hali hazırda 6502'nin ne databus'ına ne de address bus'ına bağlanmaksızın memory'e data transfer etme yeteneğine sahipti. Ancak tersini yani kontrol eden arduino'ya ( ya da başka mcu, çok önemi yok) geri bilgi gönderebilme yeteneğine sahip değildi. PIC ile ilk kurguladığım devre adres bus'a ve data bus'a neredeyse tam bağlıydı (adresleri sırasıyla sürebiliyordu, şimdiki aklım ve bilgim olsa shift register kullanırdım orası ayrı) ancak prototip board'ları test etmek için o devreyi kullanamazdım. İlaveten devreyi de aynı suda iki kez yıkanılmaz deyip geçenlerde söktüm. (Şaka öyle bir şey demedim

PIC'ten Arduino'ya geçirmediğim için arduino için tekrar çalışır hale getirmeye üşendim ve ortalıkta kalabalık olarak dolaşmasını da istemedim.)
Neyse ne diyorduk, eldeki devre mevcut tasarımla arduino'ya geri veri gönderemiyordu. 74165'i denedik olmadı, dur dedim elimde 74373 latch var, paralel input olarak alayım arduino'dan, o da yemedi. (Mantığı 6502.org'daki yazımda görebilirsiniz)
Türkün aklım ya otobüste giderken ya da belli faaliyetlerle iştigal ederken gelirmiş. Dedim 6502'ye data gönderirken kullandığım mantığın aynısını arduino tarafı için niye yapmıyorum. Senkronizasyon derdi de yok hem, arduino'ya göndereceğim data da debug datası. Hız falan önemli değil. Rom tamam, ram tamam, devre kalkış için hazır falan filan. 1 adet 74138 3 to 8 decoder ve arduino'ya 4 adet bağlantı... RESET, READY ve 74138'den iki adet rom kodunda belirlediğim adres decode sinyali ile bu iş halloldu.
Merak edenler 6502.org'da biraz daha detaylı yazıma bakabilir. Üç kağıt şöyle, 6502 tarafında gönderilecek byte sol baştan bitlerine ayrılıyor. Bit 0 ise 6502 $8000 adresinden okuma yapıyor, 1 ise $A000 adresinden okuma yapıyor... $8000-$9FFF aralığına erişim olduğunda arduino'nun 0. interrupt pin'ine bir pulse gidiyor, $A000-$BFFF aralığına erişim olduğunda ise 1. interrupt pin'ine bir pulse gidiyor. Böylece veri gönderiliyor... Tabii her bit gönderimi arasında bol bol NOP var... Arduino bu kadar hızlı üretilen interrupt ile kolay kolay başa çıkamıyor çünkü.
Şunu diyen çıkabilir (çıkmayabilir de

), lan niye belli faaliyetlerle iştigal ederken bulduğun yöntemlerle uğraşıyorsun, standart iletişim protokollerini kullansana...
Cevap,
1. Tembellik
2. Basitlik
3. Seviyorum çünkü
4. Standart iletişim yöntemlerini uygulamam daha fazla vaktimi alır. Seri/Paralel komünikasyon yapılacak bir VIA 6522 yahut bu iş için özel tasarlanmış bir IC kullanıp datasheet'ini hatmedeceksin, uygulayacaksın, sonra da debug edeceksin. Zaten biz bu işi debug için yapıyorduk?
Osiloskopum zaten yok da, tüm bu testleri logic analyzer'ım ile de yapabilirdim ancak ona da üşendim sanırım. Ve bir de tekrar tekrar kolayca kullanabileceğim bir test yöntemim olsun istedim. (Logic analyzer meme yaptı aslında, bütün bunların sorumlusu o

)
Fazla kafa şişirdim, hepinize iyi geceler
