commodore.gen.tr

Genel Kategori => Proje => Konuyu başlatan: msvstpl üzerinde Aralık 12, 2015, 13:08:28 ÖS



Konu Başlığı: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 13:08:28 ÖS
Merhaba

C64 ve Arduino kullanarak BA sinyali DMA yapılmasıyla ilgili bir inceleme - çalışma notları aşağıdadır.

Buradaki amaç ;
1-C 64 DMA nın arduino kullanılarak  yapılmasının mümkün olup olmadığını anlamak, 16 MHZ işlemci ile DMA nın fiziki sınırların ne olduğunu incelemek.
2-Olabilecekse , temel bir yapı kurarak  DMA nın aşamalarını  mümkün olduğunca anlaşılır hale getirmek , daha ileri seviyede yapılabilecek diğer projeleri kolaylaştırmak.

Bu bir kartuş projesi değil. Daha çok  C64 DMA sını anlamaya çalışan bir inceleme. Sonuçlarını gördüğümüzde bir işe yarayıp yaramayacağı hakkında fikir sahibi olacağız.

DMA kısaca bir mikroişlemci sistemi adres ve data yollarının bir başka işlemci ( çoğu zaman bir dış işlemci ) tarafından kullanılmasıdır. (Direct Memory Access = Doğrudan hafızaya erişim). Bir mikro işlemci işlerini yazılım ile yapar. Yazılımlar ram ,rom hafızaları içinde bulunduğundan DMA yapan bir dış işlemci de çoğunlukla  ram hafızaya ulaşarak istediklerini yapar.

Burada kullanılan temel malzemeler  şunlar:
1-Klon arduino: AT 328p pu + 16mhz kristal+2X22pf kondansatör
2-C64 ile bağlantıyı sağlayacak expansion port bağlantı parçası
3-Logic analyzer
4-Entegreler 2X74HC374 +74HC245+ 1X7400, bir button

Öncelikle şunu söylemeliyim: elimizde kahve veya çay bardağı bazılarımız proje yapmaya devam eder bazılarımız sakin gözlerle yapılan projeleri inceler ve olası projeleri değerlendirirken, delimawinin  yanımızdan rüzgar gibi gelip geçtiğini gördük. Oturduğumuz sandalyeden az daha düşüyorduk. Delimawi teknolojinin cpld, logic analyzer.. gelişmiş olanaklarını kullanmanın hem gerekli hem de pek çoğumuz bakımından gecikmiş bir konu olduğunu, bunlar olmadan yapılacak işlerin (biraz) “eskide” kaldığını, bizlerin de bu yönüyle   geride kalmış olduğumuzu gösterdi. O nedenle uğraştığı proje(ler) sonrasında daha anlaşılır oldu ki “hiç bir şey artık eskisi gibi olamayacak”. Delimawi ‘yi birkez daha tebrik edeyim.

Tabi,klasik bilgiler olmadan üzerine gelenleri anlamak mümkün değildir, ayrıca,öncekilerin altından kalkanlar yeterli zamanı ayırabilirlerse yeni olanların da altından kalkarlar,şüphe yok.

Ben bu sürece Logic Analyzer tarafından başlamış oldum. Birkaç bin dolar fiyatı ile satın alınması mümkün olmayan bir cihazdır. Bazı sitelerdeki projelerde kullanıldığını gördüğümde biraz imrenerek bakardım.  Sadece profesyonel işlerde kullananların sahip olabileceği bir cihazdır. Delimawinin projesinde analyzer ekran görüntüleri olan biten her şeyi net anlatıyordu, internette bu markanın  fiyatları .., en ucuzu yine 999 dolar. Mümkün değil. Ama Sürpriz..! Bazı Analyzerların fiyatı birhayli düşük. Daha ayrıntılı aradığımda Çinlilerin yaptığı (klon?) 24 mhz lik 8 kanallı iş görür,kibrit kutusunden biraz küçük “hobbist level analyzer” fiyatının dışarıda 8-10 dolar olduğunu, PIC ile uğraşanların 4-5 sene önce bunları satın alıp kullanmaya başladıklarını gördüm. Bizde de bilinen satış siteleri 45-60 TL ye satıyorlar. Sinyal akışını, frekansını,high – low yüzdelerini,farklı sinyallerin birbirleriyle ilişkisini rahat rahat “karanlık odalara,kör kuyulara” düşmeden izleyebiliyorsunuz,olup biteni,hatanın nerede olabileceğini,yapmak istediğinizin başka şeylerle çakışmasını yada sınırların ne olduğunu.., özetle  digital hardware konuları  ile uğraşanlara övmekle bitirilemeyecek bir yardımcı cihaz. 


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 13:18:24 ÖS
Logic Analyzer

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14004;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 13:22:23 ÖS
Konuya dönersek;
Genel bilgi olarak DMA da kullanılan C64 expansion port pin yapıları ve iç ilişkileri aşağıdadır. (adres ve data bus larını göstermedim..)

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14006;image)


Konu Başlığı: Ynt: C64 Arduino DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 13:33:53 ÖS
C64 DMA sını yapabilmek için 3 ayrı aşamayı yapmak gerekiyor.İlki DMA low sinyalini göndermek,6510’na kenarda kal,bir şeye karışma demek,ikincisi C64 RAM ‘e yazma veya okuma işlemini yapmak (şimdilik yazma ile ilgileniyoruz), üçüncüsü DMA low sinyalini kaldırıp her şeyi yine C64 6510 ‘a terk etmek.
Bu üç aşamaya yakından bakınca her sürecin  ardışık ama bağımsız olduklarını , birbirlerine müdahale etmediklerini gördüm. Bu şu anlama geliyor: aşamaları yaparken logic kullanmayabilirsiniz!?

1.AŞAMA DMA ‘ya GİRİŞ:

Butona basılmasıyla Bir arduino İNPUT pini(B2) start (low)sinyalini algılayarak DMA sürecini başlatıyor. İlk olarak BA nın LOW olması bekleniyor. Bu VIC entegresinin 6510 u adres ve data buslarından ayırması demek. BA Low ,Logic Analyzer da bakıldığında 43 mikro saniye kadar sürüyor. C64 1 mhz hızla yani bir clock peryodu 1 mikrosaniye olduğu düşünülürse 40+3 =43 cycle zaten 43 mikro sn olmalı. BA Low olduktan sonra 3 cycle beklemek lazım.  Normal koşullarda sayma işlemleri logic entegrelerle yapılır. Burada işi arduinonun yapmasını istedim; 3 cycle yani yaklaşık 3 mikrosniye sonrasında 40 cycle içinde bir yerde DMA sinyalini göndermek yeterli.Yaklaşık 5 mikrosaniyelik bir oyalanma ile DMA Kilit Low sinyalini göndermeyi tercih ettim.( İsteyen 5  mikro sn yerine daha ayrıntılı NOP lar kullanabilir.) Bu Low sinyali bütün işlerimizi tamamlayıp çıkıncaya kadar orada kalacak.

Şunu yapıyoruz:  Arduino’nun bir INPUT pini (C1) sürekli okuma ile BA yı izliyor ve onu Low olduğunu gördüğünde alt satıra geçip 5 mikrosn gecikme yapıyor. Bu da tamamlandığında alt satırda  başka bir arduino pini OUTPUT olarak(B0) low sinyalini C64 DMA pinine iletiyor. Bukadar. Böylece VİC in başlattığı 6510 izole sürecini biz uzatıp istediğimiz zamana kadar erteliyoruz.

3. AŞAMA  DMA’dan ÇIKIŞ : Bu aşamaya yazılım kendisi işlerini tamamlayıp bitirdikten sonra geliyor. Dışarıdan herhangi bir müdahale yok. Yapılan iş benzer. Yine BA sinyalini ve yine Low durumunu izliyoruz.Yukarıdaki aynı INPUT pini (C1) sürekli okuma yapıyor ve Low gördüğünde alt satıra geçip 5 mikrosn oyalanıyor. Ardından alt satırda  OUTPUT ile DMA Low sinyalini devam ettirmekte olan pini (B0) INPUT yapıyoruz. Bu işlem Arduino pininin C64 DMA ucu ile olan bağlantısını ‘koparıyor’. Arduino C64 DMA ucuna uyguladığı Low sinyalini kaldırmış oluyor. Serbest kalan 6510 tamamlanan BA( 43 cycle) sonrasında işine kaldığı yerden devam ediyor.

Aşağıdaki basit yazılım bu iki işlemi kapsıyor. Çalıştığında ekran görüntüsünde imleç donuyor, DMA’ya girdik yani,6510 izole edildi. Bir süre sonra imleç yanıp sönmeye devam ediyor,yani DMA dan çıktık. DMA dan çıkıldığında 6510 tekrar işleri eline alıyor, bu ara zamanı kullanarak bir toplama programı yazdım,ve run.., dma ya girildiğinde duruyor, sonra tekrar devam.. Aradaki uzun zamanlar imleç görselliğini ve programı yazmak için konuldu, aksi halde görebilmek mümkün değil. (Tabi analyzer görüntülerini saymazsak.., analyzer görüntüsünde DMA ya girildiğini  şöyle anlıyoruz R/W pini artık hiç low’a düşmüyor. R/W low , 6510 data bus’a data yazıyor demek. Sadece VİC çalışıyor, o da data yazmaz yalnızca okur, R/W high tarafındadır. Bundan sonra 6510 yerine dişarıdaki bizim mikroişlemcimiz arduino R/W low’u yaparak data bus’a (RAM’e) yazacak. (tabi , isterse okuma da yapabilir).


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 13:36:35 ÖS
DMA giriş-çıkış programı


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 13:41:02 ÖS
DMA GİRİŞ

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14009;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 13:41:46 ÖS
DMA ÇIKIŞ

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14011;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 13:47:25 ÖS
DMA Görseli

DMA GİRİŞ ÇIKIŞ

YqbwsazVs-4


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 13:51:37 ÖS
Buraya kadar işleri arduino yaptı.
Artık Bundan sonrası DMA nın en önemli 2. aşamasının yapılması.
Kullandığım Temel yapı şöyle Önce Arduino’nun pin konfigurasyonu:

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14013;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 13:55:33 ÖS
Hardware Şeması

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14015;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:00:05 ÖS
Hardware tarafında entegreler için bilinen klasik bir yapı kullandım; adres buslarını kilitleyip tutan 2adet 74374, Data bus’a datayı yazan (data yönünü seçerek hem yazma hemde okumaya olanak sağlayan) 74245. Burada  Logic kullanabiliriz;  1X7400 logic için.

Pin konfigürasyonunu oluştururken SPI ve I2C pinlerini Boş veya bu amaçla kullanabilmeye olanak sağlayabilecek şekilde düzenledim. Bir bellek veya master slave ilişkisi..vb. mümkün durumda.



Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:03:58 ÖS
Bu 2.aşamada Arduino yazılımla şunu yapıyor:

1-Önce acelesi olmadan bir INPUT pin ile (C1), BA nın HİGH olduğu, (VİC’in her şeyi eline aldığı BA low dışı) durumu bekliyor. Bu bölge 6510 ‘un kullandığı bölge. Onun yerine Arduino kullanacak. Yaklaşık 500 mikro saniyelik rahat bir bölge,( ayrıca yaklaşık7600 mikro saniyelik ayrı uzun bir bölge de var, hangisi olursa..).Bunu gördüğünde alt satıra geçiyor,Burada OUTPUT PB5 ve OUTPUT PB3 , her ikisi de low  yapılıyor. 74374’e adresler lowdan high’a geçerken yüklenebiliyor. Bunların hazırlığı.

2- PDO..PD7 ye alt adresi yazıyor ve bir high clock (PB5) ile alt adres(A0..A7) 1. 74374’e kilitliyor.

3-PD0..PD7 ‘ye bu kez üst adresi yazıyor ve bir high clock (PB3) ile üst adres(A8…A15) 2.74374’ e kilitliyor.

4-PD0..PD7’ye son olarak ( yukarıdaki adresteki C64  hafızasına konulacak) data yı yazıyor.Bu data 74245’ giriş pinlerinde beklemede..

Şimdi şöyle bir durum var;  iki 74374 de RAM adres değeri hazır. Data da hazır. Ama her üç entegrenin çıkışı yani C64 tarafı kapalı HI-Z durumunda. Buradan oraya, oradan buraya geçiş yasak.  Ama artık hazırlık tamamlandı C64’e bağlanmayı bekliyorlar.
 
Bundan sonrası şimdiye kadar yapılanların hepsini boşa çıkarabilecek kritik bir aşama. Belki de olmayacak ?

16Mhz işlemci hızlı olmaya dair bütün özelliklerini burada kullanacak.

5-Bir İNPUT Arduino pini (C0) C64 clock unu izliyor,onun High olmasını bekliyor.Bunu gördüğünde R/W pinini (B1) (OUTPUT Low) yapıyor. Bu Ram’e yazılacak sinyalinin C64’ e iletilmesi demek.(Farklı bir şey yapıyoruz; Arduino pinleri şimdiye kadar ya INPUT yada OUTPUT olarak kullanılmıştı. Pın (B1) INPUT (Low) olarak beklerken durum değiştirip OUTPUT haline getiriliyor. Diğer deyişle HI-Z de beklerken durumunu değiştirip C64’e Low sinyalini gönderiyor).
 
6- OE (Output Enable) low sinyalinin 2x74374 ve 74245 e gönderilerek onların C 64 ‘e bağlı pinlerindeki HI-Z kaldırılması ve C64 adres ve data bus’na bağlanılması. OE low gönderiliyor. OUTPUT Pin C3 Low.
 
7-Bir süre beklenmesi (RAM’e yazılıyor).

8-Pin C3 OE Low sinyalinin değiştirilerek High yapıyor. (İşlem tamamlandı).C 64  Adres ve data buslarına bağlantı kaldırılıyor. HI-Z durumuna dönülüyor.
9-R/W pininde de benzer işlem yapılıyor.Pin (B1) OUTPUT dan INPUT durumuna getiriliyor. HI-Z durumu.

Adrese (Hafıza adresine ) bir data (sayı) yazdık ve çıktık.
10- Bundan sonra kaç adrese yazmak istiyorsak  en başa 1’e dönerek o kadar LOOP yapıyoruz. 


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:06:24 ÖS
Görüntü şöyle;

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14018;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:10:19 ÖS
Gelelim asıl soruya C64 hafızasına yazabildik mi? Cevabı söyleyeyim ; Hem evet, hem hayır..!

Kolaylığı bakımından C64 ekran hafızası 1024 ‘e bir B harfi gönderdim.( aynı yere A harfini çok uzun zaman önce assembly ile yazarak - inanılmaz bir işi -  yapmıştım! Bu da A dan sonra B’si..) B harfi bana bakıyor. Tamam, oldu. Ama bir dakika, 1024 den sonraki adreslere de B yi gönderdiğimde , bazıları boş ,bazıları başka karakter.. vs , yani olmadı. Hem evet hem hayırın bizim dünyamızda bir anlamı vardır ama mikroişlemciler dünyasında  bu doğrudan  hayır anlamına gelir.
Şimdi..? Geri dönüp bakacağımız kontrol edeceğimiz yerler olmalı ? Hata nerede olabilir ?  a) hardware b) software c) hiçbiri arduino yetersiz kalıyor? Önce hardware bakmalı.

Expansion port bağlantısı? Bozduğum Simon’s Basic kartuştan oluşturmuştum, iyi durumda değildi, lehimler bakırla beraber sıyrılmaya başlamışlardı.Lehim ekleyip güçlükle eğri bir şekilde porta sokabilmiştim üzerinde bir tak-çıkart soket var birkısım pini kıstırarak buradan almıştım, karışık bir şey, sorun bağlantıda olabilir, port adaptörünü çıkardım, dağıttım.  Diğerleri Final 3 ve kafa ayar kartuşları var, kıyamam.  Asetatlı kalem sayesinde hiç beceremeyeceğim halde ilk PCB mi yaptım: expansion port adaptörü. Kimya konusunda bilgim vardır, biraz onun kolaylığı oldu, perhidrol ve HCL yi kullandım. Eritme sonrası ortaya çıkan yol bakırların üzerini lehimle kapladım ve kabloları lehimledim, yakışıklı bir şey olmadı ama iş görür, tek tek  kontrol ettim.., bu tamam. Kullandığım bread board bağlantı kabloları yeni, pinli idi, güvenilmez olabilir, eski yöntem pinsiz sade  kablo ile değiştirdim. Parazit engelleyici bir iki 100n kondansatör koydum. Data ve adres bus bağlantılarının entegrelerdeki durumlarını, arduino pin uç bağlantılarını kontrol ettim . Tekrar denedim. Cık… olmadı , aynı yanlış yazmalar devam ediyor.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:13:07 ÖS
Bu da yenisi

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14022;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:22:27 ÖS
Sorun çıkmasını beklediğim 5—9 aşamalarına yöneldim. Burada değişik kombinasyonları, değişik DMA tiplerini, değişik pin sinyal gönderme tiplerini, ve değişik sinyal aralıklarını oluşturmayı denedim. Epey uğraştırdı. Biraz böyledir, ne kadar kurcalarsanız, o kadar fazlasını öğreniyorsunuz. Eh.., bir inceleme başka türlü olmaz zaten, ama , bukadar sürmesini de beklemiyordum.., neyse , sonuçta aşağıdaki bilgiler ortaya çıktı:

Çeşitli DMA lar (yazmalar) yapılabilir durumda. Bunlar birbirine yakın hardware sahip ve  küçük farklar var. Temel yapı  yukarıdaki Arduino pin konfigürasyonu, bazısında bir-iki pin kullanılmıyor kiminde ek bir pin ve logic kullanılıyor..vs. Uzun anlatıp dikkat dağıtmak istemiyorum,aşağıda tercih ettiğim bir tip ile devam edeceğim. Bu yapıda Logic terk edilmiş durumda. (7400 kullanılmayacak). İşlerin hepsini arduino yapıyor : 2X74374 ve 74245 temel elemanlar ve aynı bağlantıdalar. İşlem aşamaları yukarıda tarif edilenin aynısı.

74245’in DIR ucu OUTPUT PinC2 ye bağlı. Bu pin şimdilik hep High durumunda. A dan B ye geçiş sağlıyor (A: Arduino tarafı, B:C64 tarafı) , yani yazma işlemini sağlıyor. Pin Low olduğunda B den A ya geçişi sağlayacak yani okuma yapılabilecek.
 
Görünen o ki, hatanın olduğu yer hardware değil , arduino da değil, yazılım. Önce şunu tekrar edeyim: Arduino’nun hızına başvurulan kritik yerde (yani yazma ) aşamasında 3 basamaklı bir işlem var. Birincisinde READ ile bir sinyal (C64 clock High) algılanıyor.  Sonra R/W Low sinyali ve OE Adres ,Data Buslarını açan Low sinyali. Sonra bu iki sinyalin sırayla high ile ‘kapanması’. Bildiğimiz;  bu sinyalerin (R/W, OE)   C64 High da iken yapılması gerektiği. Ama High’ın neresinde başlayacağız , hangi aralıkla (iki sinyal arasındaki aralık) , ve ne kadar süreyle ?  Bilinmeyen 3 önemli şey bu.  Problemi yaratan da bunlar. Burada elimde durumu izleyebileceğim başka bir araç yok. Böyle bir araç var mı onu da bilmiyorum? Osilaskop da burada işe yaramayabilir, çünkü size bir davranış türü gösteren C64 var (sadece clock değil , data ve adres bus’nı kullanmakta olan VİC’le beraber..) ve bu davranışı çok iyi tanımıyorsunuz ! Neyse sonuçta, doğru başlangıcı , aralığı ve süreyi buldum( yada problem çıkartmayan yapıyı buldum)  hatalı yazımlar ortadan kalktı. Bu konuya daha sonra tekrar dönmeye çalışacağım.

Denemeler esnasında enteresan durumlarla da karşılaştım. Bunlara da sonra bakarız.
 
Yazma işlemini yaptığınızı anlamanın tek yolu vardır. Uygun şekilde test etmek. Sıra burada;

Test hakkında biraz bigi vereyim ; DMA ile önce 255 adreslik ekran bölgesini sonra tamamını sonra değişik adres bölgelerinde değişik Kbyte dataları yazıp kontrol ettim. Bu sayede hataları yakalama olanağım oldu. Tamam dediğiniz bir anda 8Kb yazmanın içinde 4-5 adresin yanlış yazıldığını görüyorsunuz ! Güvenebileceğiniz hiçbir şey yok yani. Yöntem olarak bir hafıza bölgesine yazacağınız program,oyun, rakam.vs ne ise başlangıcından sonuna kadar bütün adreslerdeki sayıların toplamını buluyorsunuz. DMA ile yazdığınızda adreslerdeki toplam aynı olması gerekiyor. Son testi 8 K ile yaptım : 0_255 arasındaki sayıları ard arda bir hafıza bölgesine gönderiyorsunuz sonra Basicte program veya ekranda iki satır içinde komut olarak kabul edecek şekilde mini bir toplama ve print  programı yazıp o hafıza bölgesini topluyorsunuz. Örn: 8 K yazılan bir bölgede : A=0:FORB =32768 TO 40959 :K=PEEK(B):A=A+K: PRİNTK;:PRİNTA : NEXT ve RETURN Bütün adresleri izliyebiliyorsunuz (Tabi biraz sabırla.)PRİNT,  NEXT ten sonra da olabilir, daha çabuktur, sadece sonuç gelir.. Toplam: 1044480.

Buraya kadar ARDUINO kullanarak adres ve data bus entegreleriyle DMA yazma işlemi tamamlanmış oluyor. Program loop adresleri değiştirilerek hafıza bölgesinin seçilmesi ,ayrıca, data değeri istenilen bir dış bellekten alınması mümkündür. Sonuçta bu program diğer başka işler yapıldıktan sonra veya onlarla beraber bir DMA yazma alt rutini olarak kullanılacaktır.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:27:20 ÖS
Burada biraz ara verip yapılan işlerle ilgili değişik bazı ek bilgiler , değendirmeler ve düşünceleri belirtmek istiyorum:

1-- Arduino Start anında, açılışta (normal durum diyelim) I/O digital PIN leri INPUT olarak ve hepsi Low şeklinde hazırlıyor. Bu durum “HI-Z”demek yani C64 ün data ve adres buslarına arduino karışmayacak demek. Bir çakışma ,karmaşa.. vb yok demek. Çok aranılan bir durum hazır olarak geliyor. Yine, DMA ve R/W hatlarına dokunulmaması gerekiyor. Arduino tarafında bu pinlerin INPUT da olması problemi engelliyor. Arduino ‘nun pinleri aslında INPUT “float “ durumunda, ama sorun çıkarmamaya yeterli, HI-Z kabul ediliyor.

2--- Yazılımda işlemleri gereken yerlerde açık bit operandları ile yaptım. C64 ün assembly dilini kullananlar veya kullanacak olanlar için anlamada kolaylık olacağını düşündüm.

3-- Arduino pinlerinin ayrıntılı kullanımını ve bit operasyonlarını yazılımın içine ayrıca açıklamalarla koydum. Oradaki bazı açıklamaları buraya almadım.Burada daha çok İşlem aşamalarının anlaşılmasını önemsedim. Aşamalar eğer yazılım ile birlikte adım adım okunursa daha kolay anlaşılabilecektir.

4--C64 DMA sında insanın başlangıçtaki beklentilerini yanıltan bir durum var. DMA yı ve onun C64 ile iç ilişkilerini hep digital sinyal olarak izliyorsunuz ,düşünüyorsunuz. Biraz bu nedenle, biraz da hardware ile uğraşmanın alışkanlığından, logic ile yapılacak şeylerin olduğunu ve işin bir kısmının bu yolla yapılması gerektiğini varsayıp, birşeyler tasarlıyorsunuz. Oysa DMA nın basit hali sözkonusu olduğunda buna gerek kalmıyor. Şaşırdığımı söylemeliyim. 3 Aşamalı DMA işlemin birbirinden bağımsız olması mikroişlemcinin yazılımla istenilen logic gerekleri karşılanmasını olanaklı kılıyor.

5--1 klon arduino +2X74LS374+1X74LS245 (DIP entegreler) toplam 87mA çekiyor. 74HC245 ve 74HC374 kullanıldığında 20 mA çekiyor. Büyük fark var. Kullanılacak entegrelerin ne olması gerektiği tartışmasız ortada.

6—-Burada arduino kelimesine açıklık getireyim. Arduinonun kullandığı Atmega 328 p pu entegresine  bir tür “ format” (boot-bootloader) atarak ‘arduino’ haline getiriyoruz. Klon bir arduino entegresi elde ediyoruz. Arduinonun diğer ek unsurları ( regülatör, usb..vs)tabi ki yok , gerek de yok. Sadece yazılımı ve pinlerini kullanıyorum. Bu konuda internette bol miktarda yazı var.Uno’ya ek bir küçük kart yaptım bootloader ve program yüklemesini bu kart ve uno ile beraber yapıyorum. Galiba ek bir donanım yapmadan örn 2 uno kullanıp ,birinden entegreyi çıkartıp kullanılacak yeni 328 p pu yu koyup diğer uno aracılığıyla da bu işi yapabiliyorlar. Bu da kolay bir iştir. İsteyen ise bununla uğraşmaz arduino mini’yi doğrudan kullanabilir. Yüksek miliamper çekmeyecektir.

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14024;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:33:03 ÖS
8--Bir de şöyle bir şey var; sorunları çözerek ilerliyorsunuz, yeni sorunlara odaklanırken, çözüp geçtiğiniz eskisinden uzaklaşıyorsunuz, oysa hepsi sorun.., ama, siz onu geçtiğinizden önemsizmiş gibi oluyor. Değerlendirme ,açıklamayı atlayabiliyorsunuz. Konuyu toparlarken boşluklar ve kopukluklar varsa bundandır, özür..
9--DMA yazma işleminde arduino göndereceği her yeni datayı (çoğunlukla 2 veya3) X c64 clock’nda hazırlıyor.( 3. veya 4.) de gönderiyor.
a- DMA ya girerken 5 mikro sn gecikme kullanıldığında 2 cycle boşa harcanmış oluyor.Çıkarken de kayıp 2 cycle var. 4 Cycle kayıbın hiçbirşey ifade etmediği ortada.
b- 8Kblık (8192kez) data gönderimi kabaca 8,2 X3 = 24,6 milisn. Ayrıca arada VIC’in ortalığı kapladığı BA low lar var , bunlarda hesaba katılmalı. C64 açılış sonrasında, analyzer 8kb ın 28,3 mili sn de gönderildiğini gösteriyor. (Bir kısım datanın 4 cycle da gittiğini düşünürsek) hesap hemen aynı. Oldukça kısa bir zaman. Kabaca 280kb/sn lik bir hız. Ancak DMA yapılacak program, oyun.vs bir ‘dış’ hafızadan alınacaktır , hız düşecektir.
10--Bu konu ile ilgili başlığı açarken, ikilemde kaldığımı belirtmeliyim. İzlemek isteyenlere yazılanlar belki biraz - öyle olmadığı halde- ağır gelebilecektir , hatta can sıkabilecektir. Öte yandan DMA –belki telif hakları ..vs nedeniyle - daha çok bir gizemin arkasında kalmış. İngilizce sitelerde bilgiler bağlantısız kesik kopuk ,birkaç cümle, belki biraz açıklama ,ama yine pek çok belirsizlik.. Amacım olabildiğince açıklayıcı bir tür kullanılabilir bir kaynak oluşturmak. DMA yı geçtikten sonra C64 için başka çok şeyi yapabilme imkanı olabilecektir. Bu nedenlerle başlığı açmanın daha doğru olacağını kabul ettim. Yazılanlara ilgilenmek isteyen ama fazla bir şey anlamayan arkadaşlar için şunu söylemek isterim: Burada yapılan işlerin hepsi sadece 5 volta bir LED bağlayıp yakmak zorluğundadır. Fark biraz sabır biraz düşünmek ve birikim oluşturmaktadır. Hepimiz aynı yöntemi kullanırız: bir yerde takılırız ve kurcalamaya başlarız. Bu bizim kavram oluşturma sürecimizdir, biraz deneriz,biraz düşünürüz, biraz okuruz, biraz oynarız .., sonunda LED’i yakarız. Artık onu biliriz ve istediğimiz yerde kullanırız. Burada anlatılanlar, benzer diğer kavramların toplamı gibidir. Herkes istediğinde elde edebilir, yapabilir, çekinilecek, anlaşılamayacak hiçbirşey yoktur.
 
11--(Logic Analyzer ekranına bakarak söylersem) İşin ilk püf noktası R/W sinyalini mümkün olabildiğince c64 clock bir önceki high’e yaklaşarak başlatmak. Yani R/W low sinyali c64 clock low iken ve ‘elden geldiğince’ geriden başlamalı. (Adres ve data) bus enable OE sinyalinin de gecikmeden R/W e yakın olarak başlaması gerekiyor. (Çıkan sonuç : 6510 Ram’e yazma işlemini c64 clock low dan high ‘a geçerken gerçekleştiriyor. Durum bunu gösteriyor. İngilizce yazılarıda böyle bir ifade ile karşılaşmadım ? )

12--16Mhz lik bir işlemcinin değişik operand sonrasında sinyallerinin ne kadar temiz olduğunu bilmiyorsunuz.(işlemcinin clock hızıyla çalıştığınızda clockla ilişkili sinyallerin kendisindeki temiz olmayışlar bir sorundur,arduinoda bazı sinyal bozulma resimlerini görmüştüm). İşlemcinin her clock’unu değerlendirmeye çalışıyorsunuz. Yazma çevrimine başlarken mikroişlemci input( ile c64 high sinyalini) read yapıp yakalarken belirsiz bir zaman gecikmesi var. R/W ve OE sinyalinin her c64 açılışında ve yazma anında topluca kaymış yer değiştirmiş olduğunu görüyorsunuz. Bu kaymaların yanlış DMA yazmaların temel sorumlusu olduğunu sanıyorum. Bunlar da belirsizlikler.. R/W sinyalini olabildiğince geriye çekmenin faydası burada ; ileri kaydığında emniyetli yazma sınırı içinde kalabiliyor.( R/W Çok geri aldığınızda ise tamamen işe yaramayan bir bölgeye düşüyorsunuz ).

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14026;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:36:40 ÖS
Tabi bu konuların hepsi 16 MHZ bir işlemcinin davranışı. 32 veya 64 Mhz işlemci ile daha kolay çalışılabileceğini varsayabiliriz .Yalnız, yazılımdaki nop ların çokluğuna bakılırsa ,16 Mhz mikroişlemcinin kendisi bakımından sorun yok gibi gözüküyor. Sorunu çıkaran C64 gibi. İlk gözağrısı bir bilgisayarın biraz nazına katlanmayı da normal kabul etmemiz gerekiyor.
 
Bu son iki maddeye daha sonra tekrar dönmek istiyorum.

Bazı Görüntüler

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14028;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:41:27 ÖS
diğerleri;

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14030;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:43:10 ÖS
Arduino

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14034;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:45:01 ÖS
expansion port

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14036;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: AmigaMan üzerinde Aralık 12, 2015, 14:45:37 ÖS
Çok güzel çalışma ellerine emeğine sağlık


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:49:40 ÖS
Yazma işlemini tamamladık. Sıra okumada. Arduino bu kez yine bir RAM adres değerini hazırlayacak  ardından C64 adres ve data bus’na bağlanacak. Data için yazmada bir değer göndermişti, şimdi bir şey göndermeyecek , alacak (okuyacak). Yazmada olduğu gibi 2. aşama  bu işlem için yine DMA low sinyalinin baştan hazırlanarak gönderilmiş olması gerekiyor.

Okumayı yapabilmek için yazmada olduğu gibi yine iki sinyale ihtiyaç var. R/W ve OE.  Bu kez  bir kolaylık var. R/W okuma için High olması gerekiyor. C64 ün iç yapısında R/W bir dirençle Vcc yapılıp High da tutulmuş.(Pull-up). Yani bu sinyale ilgili bir şey yapmamız gerekmiyor. Normal durum read durumu. Bu sinyali bozacak olan sadece 6510, o da izole durumda. DMA ya girdikten yani DMA low sinyalini uyguladıktan sonra analyzer ‘da read sinyali hep high da gözüküyor.

Farklı bir şey daha var 74245 data bus entegresinin yönünün değiştirilmesi. Bu iş entegrenin DIR ucuna uygulanan sinyalle yapılıyor.  High olduğunda A dan B ye geçiş yani Arduinodan C64 ‘e doğru (yazma). Low olduğunda B den A ya yani C64 ‘den Arduinoya doğru yani okuma. Bu işi arduino’nun C2 pini yapıyor. Uygun yerde C2 pini low yapılacak.

Diğer bir konu Arduino üç entegreyi de aynı D registeri ve yolları (D0…D7) üzerinden kullanıyor. Yazma esnasında her üç entegreye de OUTPUT  ile adres ve datayı hazırlıyordu. Oysa şimdi okuma var, yani, INPUT. D Registeri ( D nin I/O Pinleri) RAM adres değerlerini 74374 lere yüklerken yine OUTPUT olur, ama , bu işi bitirmesinden sonra INPUT durumuna geçmesi gerekecektir.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:54:01 ÖS
Aşamalara başlayalım:

1-DMA ‘low yapılır. (yukarıdaki yazma program girişinin aynısı).

2-Şu ana kadar 74245 DIR High olarak kullanılmış veya düşünülmüştü, şimdi OUTPUT C2 Low yaparak yönünü değiştiriyoruz.

3- INPUT C1 pini yine BA High olmasını bekliyor.

4-(bu işlem uygun başka bir yerde de yapılabilir) OUTPUT B5ve OUTPUT B3 low yapılarak 74374leri adres değerlerini yükleyecek CLK high sinyallerine hazırlık.
5- PDO..PD7 ye alt adresi yazılıyor ve OUTPUT high clock (PB5) ile Alt adresi (A0…A7) 1. 74374’e kilitleniyor.

6-PD0..PD7 ‘ye bu kez üst adres yazılıyor ve OUTPUT high clock (PB3) ile Üst adresi (A8…A15) 2.74374’ e kilitlleniyor.

7—D pinlerinin hepsi OUTPUT idi, Burada hepsini INPUT yaptık.

Okuma hazırlığını tamamladık.
 
8— İNPUT C0 pini read ile C64 clock High olmasını bekler.

9— C3 OUTPUT LOW yaparak OE LOW sinyalini 2X74374 ve 74245’e gönderiyoruz. HI-Z ortadan kalkar ve 74374 ler C64 adres busına RAM adresini yazar. C64 data bus ,Arduino’nun, D0-D7 pinlerine bağlanır. RAM hafızadaki değer Arduino pinlerindedir.

10—Arduino D port pinlerinin hepsini PİND ile okur.

11—Okuma tamamlanmıştır. C3 sinyali (OE) HİGH yapılarak. Her 3 entegre C64 ile tekrar HI-Z durumuna getirilir.

Bukadar.

(http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=11615.0;attach=14043;image)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 14:57:34 ÖS
Peki, RAM den okuduğumuz bir değerin doğruluğunu nasıl anlayacağız, testi nasıl yapacağız?

Okuduğumuz data  biryerde saklanmalı, rakamları tek tek yada toplayıp orijinal haliyle karşılaştırmamız  gerekiyor.  Datayı bir yerde saklamak demek arduinonun  hafızasını kullanmak yada bir dış hafıza unsurunu hardware bağlamak demek. İlki mümkün olsada bu arduinonun serial monitorü kullanması demek,  konuyu usb FTDI a getirecek, elimde FTDI yok, olsada burada işleri biraz karıştıracak. Bunu geçtim. Dış hafıza SD card..vs bunlar da konuyu değiştirecek..  Bir de  C64’ün içinde neyi okuyacağız? Ya bir oyun yada bir program yükleyip onun üzerinden çalışacağız, test uzunca bir iş, her seferinde yükle..vs,iş yükü artacak. Sonuçta şöyle bir yöntemde karar kıldım : Okuyacağımız şey sadece rakamlar ve zaten C64 içinde doğal olarak var: Basic ROM. Okuma programının ardına yazma programı ekledim. Basic Rom’un değişik KB larını okuyarak  boş bir hafıza bölgesine yazdım. Yani Bir hafıza bölgesini bir başka hafıza bölgesine DMA ile kopyaladım. Basit bir basic programıyla (peek)  ile bazen tek tek bazen de toplamları alarak karşılaştırdım.

Denemelerde önce 1KB bölge hatasız olarak (defalarca) kopyalandı. Aynı program  4 KB için 7-8 adresi yanlış okudu!  Düzeltilmiş yazılımla 8KB Basic Rom hatasız olarak kopyalandı. Sonuçta Toplam: 933206.

OE sinyalinin ne zaman açılacağı Okuma işleminin nekadar  beklenerek yapacağı, ne zaman bitirileceği  yine temel sorular..

Analyzer da okuma - yazma 8Kb programı 53 msn sürüyor. Bunun 28,5 ms yazma . Okuma ve Yazma zamanı birbirine yakın. Okuma bir hafızada saklandığında hız azalacaktır.

Sadece bir Okuma programını yapmak, Örneğin  1K lık arduino EEPROM’un içine koyan bir program da yazabilirdim. Yada  Sd kart ile oyun yükleyip çalıştırılabilirdim, ama amacım şu an bu değil. Konu olabildiğince sade kalsın. Daha sonra  başka şeyler olabilir, SD kard takılabilir..vs. Okuma yazma programında , okuma işlemine dair bütün bilgiler var. Uygun şekilde copy-paste edilebilir.. Görselik için yukarıdaki 8K test aşağıdadır. DMA geçen ‘parazit ‘ anı içinde. Basicte 8k (peek) ile toplanması uzun sürüyor.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 15:00:32 ÖS
Basic Rom DMA kopyalama
OKUMA YAZMA

3BZWsE5mdjw


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 15:01:24 ÖS
Yukarıda anlatılan işlemlerin özelliklerini gerçekleştirdikten sonra her türlü hardware ile DMA yazma veya okuma yapmak mümkündür. Ben anlaşılabilirliği ve ulaşılabilirliği daha kolay olan bir yapıyı öne çıkarmayı tercih ettim.

Şimdilik ara vereyim.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 15:11:05 ÖS
Görseller tamam tekar gerekmiyor..



Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 15:46:05 ÖS
Word yanlış işler yapıyor. Benim bilgisayarda aynı isimli dosya farklı şeyler açıyor, okuma yazma programını yine yanlış gönderiyordum ;

Umarım bu sefer olur

C64 ARDUINO DMA OKUMA YAZMA PROGRAMI





Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 15:50:52 ÖS
Yöneticimiz Simon'dan  Yanıt 23 deki 116 KB dosyayı silmesini rica edeyim.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: Simon (Özay Turay) üzerinde Aralık 12, 2015, 15:58:14 ÖS
Öncelikle ellerinize, emeğinize sağlık. Müsait zamanda sakin kafayla okuyup özümsemeye çalışacağım.

Ek silmeye gelince: mesajı düzenleme aşamasına gelip Ek Seçenekler... bölümünden dosya adının önündeki işareti kaldırmanız yeterli. ;)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 12, 2015, 16:22:42 ÖS
Simon teşekkür ederim.Tamam.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: AstronBnX üzerinde Aralık 12, 2015, 18:50:06 ÖS
Bu tip bilgileri paylaştığınız için teşekkürler. Daha öncede aklıma gelen ve yapmak istediğim bir proje vardı kısaca bunun cevabı olabilir..

PC üzerinden USB2C64 (arabirim projenin adı olabilir diye düşünmüştüm) ile bağlanıp Eclipse gibi bir ide üzerinden C++ programlayıp direk C64 üzerinde çalıştırmak hatta DEBUG etmek mümkün olabilir.. Böylelikle çok hızlı bir şekilde yazılım geliştirilmesine imkan sağlayacaktır.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: Simon (Özay Turay) üzerinde Aralık 12, 2015, 19:59:25 ÖS
@AstronBnX: DMA ile olmasa bile IRQHack64 bu dediğini (en azından derlenen kodu çalıştırma kısmını) USB-TTL bağlantısı ile yapma potansiyeli olan bir kartuş. ;)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: LW3D üzerinde Aralık 12, 2015, 22:26:44 ÖS
@msvstpl harika bir döküman. Teknik olarak bundan faydalanacak bilgim yok. Ama gösterdiğin çalışma, emek, bizlerle paylaşman 4*4 lük...Çok teşekkürler.

@simon @AstronBnX Doberman64'de bunu yapabilir sanırım.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: i_r_on üzerinde Aralık 12, 2015, 23:18:49 ÖS
elinize sağlık,

delimawi cpld'ye geçince arduino ile denemek benim de aklıma gelmişti ancak girişmemiştim.

bilgisayarımda word olmadığı için doc uzantılı dokümanları göremedim. ino dosyasını zip'leyip yükleseydiniz daha iyi olurdu.

bu arada kullandığınız logic analyzer (salae) benimkinin aynısından. iş görüyor, 8 kanal denmesine rağmen analiz özelliği kullanılırken ancak 7 bit analiz edebiliyorsunuz ancak doğrudan sinyal takibi için iş görüyor. sid player devresinde 6502'yi düzgün reset ettim mi, kod çalıştı mı falan derken epey işimi görmüştü.

bu noktada işin içine sd kart entegre etmek çok zor bir şey değil irqhack64'ün source'larına bakarsanız klasör desteği falan da var. (nette arayıp da kolay kolay bulamazsınız, genelde insanlar ekrana print etme şeklinde kullanmışlar)

eh artık buradan yeni bir loader beklemek bizim hakkımız :)


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: eins üzerinde Aralık 13, 2015, 23:00:14 ÖS
@msvstpl, ellerine emğine sağlık, çok güzel bir inceleme olmuş.
Çok benzer yollardan geçmişiz ve gene çok benzer problemleri yaşamışız.

Doberman projesi ile ilgili olarak belirtmek isterim ki, başlangıçta ki amacı sadece bir loader olmaktı. Ancak daha sonra çözümü DMA ile ortaya koyunca bir loader olmaktan öteye geçti proje. Ben projede bir yerden sonra CPLD kullanma yoluna gittim, zira olması gereken logic tasarımı istediğim hızda çalıştırabilmek için gerekli olduğunu düşündüğüm kapı vb. entegrelerin sayısı artmaya başladı. Bu hem akım tüketimini hem de devrenin karmaşıklığını arttırmaya başladı. Aynı zamanda araştırma geliştirme süreci devam ettiği sürece, CPLD gibi bir avantaja sahip olmak, lojik devre tasarımını neredeyse yazılım yazar gibi kolay bir şekilde de yapabilme özgürlüğü getiriyordu.

Ha bu arada CPLD belki Doberman tarzı bir proje için lüks görünebilir. Aslında öyledir de. Ama kullandığım CPLD başka bir projeden elimde mevcut olduğu için kullandım. Eğer özellikle bu proje için bir CPLD seçecek olsaydım en azından aynı entegrenin daha çok bacaklısını kullanarak, adres latchlerini bile CPLD içerisine koyar tek chip ile çözüme giderdim.

Ben yazının tamamını okudum. Açıkçası DMA konusunda bir döküman hazırlamak konusunda benim enerjim olmazdı. Sadece projeyi yaparken notlarımı paylaşmıştım. Senin yazdıkların derlenip çok güzel döküman haline getirilebilir. Tekrar eine sağlık. Benim eklemek istediğim bir kaç küçük nokta var izninle;

- Phi2 Clock'u sadece logic analyser ile izlediğin haline güvenme. Zira iniş ve çıkışları çok düzgün değil. Ben sadece bu sebepten ötürü Doberman projesinde ciddi sıkıntılar yaşadım. Bu noktada senin avantajın bu sinyali MCU ile okuyor olman. Yani sinyal iniş ve çıkışlarındaki gürültüler seni çok etkilemeyebilir. Ben Phi2 Clock'un güvenilmez olması sebebi ile Doberman'da 8 kat daha hızlı çalışan ve sinyali düzgün olan Pixel Clock'u kullanarak kendi Phi2 Clock'umu üretmiş ve onu kullanmıştım.

- Yazma ve okumalarda C64 içerisindeki dinamik RAM'lerin PDF'lerinde bulunan Read-Write diagramlara bir göz atmanı öneririm. Sözüne ettiğin 500uS lik temiz bölge aslında çok kritik. Temel prensip olarak, DMA ile yazarken clock'un olabildiğince başlarında datayı hazır etmek, okurken de olabildiğince geç okumak gerekiyor. Bu konuda ingilizce bir döküman bulamadığını yazmışsın. Sanırım ben bu konuyla ilgili olarak proje ile uğraşırken çok net bazı ifadeler okuduğumu hatırlıyorum. Son olarak bu 500uS lik temiz bölgenin kullanımı konusunda zamanlamada bir miktar ince ayar gerekiyor. Ben projenin son saffasında bu konuya bir hayli zaman harcmıştım. Finalde hiç hatalı byte olmadan yazma ve okuma yapabilir hale geldim. Hatta bu testleri ekmek kasa vb farklı board revizyonları üzerinde de ayrıca denedim.

@AstronBnX, Doberman kartuşu ile C64 USB üzerinden doğrudan PC'ye bağlanarak kullanılabiliyor. Sadece oyun yükleme değil, anlık olarak DMA yaparak herhangi bir hafıza bölgesinin okunması yazılması vb...

DMA konusunda yardımcı olabileceğim herhangi bir konu olursa bilgi verirseniz, hiç üşenmem ilk fırsatım olduğunda detaylı olarak cevaplamaya çalışırım.

Kolay gelsin,


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Aralık 14, 2015, 23:40:30 ÖS
@Amiga Man: Teşekkür ederim.

@AstronBnX : Arduino‘nun buradaki kullanışında D0 ,D1 pinleri ( R(X),T(x) ) Data için ayrılmıştı. Bunları kullandığımızda bir çakışma olur mu ? İkisinin kullanımı farklı zamanlamalarda yapılan farklı işler . HI-Z gereğiyle bir ilişkileri de yok..Problem olmaması, gerekir. Ama, önemli değil, Arduino kütüphanesinde 2. R(x),T(X) yapabilme olanağı var.Bir uygulamada ikisini de kullanmıştım. Boş pinler var,en kötü durumda 2.si kullanılır.

@i_r_on : Teşekkür ederim.  Hem DMA’ yı hemde Arduino DMA’yı senin yapmanı bekliyordum, (belki fırsatı olsa veya yeterli zaman geçmiş olsa  simon’da yapacaktı..) öyle olmayınca galiba iş başa düştü.
 
SD kart konusuna geldiğimde söylediklerine bakacağım.

Yazılımları  Zip olarak gönderemedim.

Not: DMA Giriş ve Çıkış Programını çalıştırmak için 2X 74374 ve 74245 entegre OE lerini Vcc ye bağlayıp High da tutmak gerekiyor. HI-Z durumunu kendimizin sağlaması gerekiyor.

@ LW3D : Teşekkür ederim.

@Delimawi : Teşekkür ederim. Sen proje yapmaktasın , tasarladığın şeylerin gerektirdiği her türlü malzemeyi-başkaları anlasada ,anlamasada-  kullanmak durumundasın. Ben proje yapmıyorum, yapmayı da şimdilik düşünmüyorum, en fazla bir SD kart bağlarım..o kadar. DMA ‘yı basitleştirmeye anlaşılır ve kolay kullanılabilir hale getirmeye çalışıyorum.
a- Fi  clock’un osilaskop görüntüsünü daha önce bir yabancı sitede görmüştüm. Sendekinin aynısı. Clock  gerçekten farklı ve temiz değil. Çıkan kenarı düzeltmek  için schmitt trigger denedim bir işe yaramadı.Yalnız şöyle birşey var:  eğimi  ve gürültüsü olsa da tırmanan bir kenar. Bu (örn low dan high’a)sinyal  eşiğini geçerken bir netlik sağlar.(Öyle de olmalı ki C64 içinde iş görebilsin ?). Konunun daha çok C64 –RAM de dahil olmak üzere- VIC ve diğer iç ilişkilerinde olduğunu sanıyorum.
b- İnce ayar konusunda haklısın. Aynı  kanıdayım. Hala denemediğim NOP aralıkları var.Bunlara tekrar döneceğimi belirtmiştim .Ama, neyi nasıl ayarlanacağının bir ölçüsü yok. Şimdiye kadar  hardware ile yaptığım tüm işlerde  olanın da olmayanın da açıklaması elimde olmuştur. Deneme –yanılma ile bazı tarifler oluşturarak yol almaya çalışmak kullandığım bir yöntem  değil. Ama şimdi işte  böyle bir yerdeyim. Buna pek alışık değilim, yine de bir yöntem geliştirip bu sinyal akışını daha anlaşılır yapmaya çalışacağım?

Kolay gelsin..


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 13:51:27 ÖS
Tekrar merhaba,
Konu  biraz ağır gitmiş, ama elden gelen birşey yok. Ne kadar basitleştirsem ancak bu kadar olabilmiş.
Farklı şeyler söyleyeyim, havayı biraz yumuşatayım. Kısa bir hikaye:
......
Evimize misafirliğe gelen arkadaşımın  3-4 yaşlarındaki afacan kızı biz içeri girip yerleştikten bir sure sonra yabancı yerde olmanın çekinikliğini üzerinden attı . Annesinin yanından ayrılıp salonda  ortalığı kolaçan etmeye , oynayabileceği işe yarar birşeyler aramaya başladı. Küçük çocuklar için evde verilecek oyuncaklar vardı ama bunlar onun yaş grubuna uygun değillerdi. Bir süre bakınıp dolaştıktan sonra annesinin yanına geldi. Ortamın kendisine pek elverişli olmadığını anlamanın can sıkıntısıyla bezgin bakınmaya başladı. Ne yapacağını bilmez bu durum çok fazla sürmedi. Sonra , uzakça biryerde, masanın arkasında işıklı bir şeyi fark etti, sandelyeleri itekleyip çekiştirerek oraya ulaştı. Bir beta video cihazı. Önce durdu, tereddütle baktı, kararını verdi  parmağını uzatıp bir düğmeye bastı. Video cihazı bütün marifetini göstererek kaseti içeri alıyormuş gibi mekanik hareketleri başlattı, birtakım ard arda gürültüler patırtılar,vınlamalar, aynı anda yanıp sönmeye başlayan ışıklar, tam bir şölen.. Annesi bozar deyip yerinden yerinden kalktı,ben bir şey olmaz, cihaz bozulmaz, bozulsada önemli değil dedim. Bizim afacan oyuncağını bulmanın , yeni şeyler keşfetmenin merakıyla bütün düğmeleri denedi ışıkları seyretti hevesini alıncaya kadar video ile oynadı.
Aradan birkaç ay geçti. Tekrar bizde toplandığımız bir gün yine içeri salona girdik, henüz oturma düzeni almaya çalışırken, afacan yanımızdan sıyrılıp doğru videoya yöneldi. Hiç vakit kaybetmeden düğmelere basıp ışıkları seyretmeğe başladı.Hepimiz ona bakıp gülüyoruz..
……………..
İnsan beyni böyle davranıyor; birşeyi başlatıp ilerletip ara verdiğinde tutuyor,saklıyor. Daha sonra imkan olduğunda veya elverişli bir zaman yada ortam bulduğunda “.. kaldığı yerden devam ediyor “.
Şimdi ben de öyle yapayım kaldığım yerden devam edeyim.

Başka şeyleri toplamaya çalışırken bazı bilgileri atlamışım:

6510 Write ve Read clock timing aşağıda. Arduino’nun yapacağı timing’in bunun bir benzeri olması  gerekir.

1-Hem okumada hem de yazmada R/W sinyali ve Adres Bus beraberce ve önceki Ø2 low’un içinde ‘erkenden’ gönderiliyor.
2-Data bilgilerine Ø2 High’ın ikinci yarısında başlayan ve Ø2low’un içine taşan bir zamanda ulaşılıyor.



Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 13:52:57 ÖS
Okuma


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 13:54:23 ÖS
DATA


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 13:56:17 ÖS
Şimdiye kadar yaptığımız sinyallere  bakılırsa kurcalayarak da olsa hem yazmada hem de okuma_yazmada 1 no lu gereklere uymuş durumdayız. Adres Bus (OE) ve R/W peşpeşe olabildiğince erkenden gönderiliyor.

Data bus ise Adres bus ile beraberce  OE ‘nin içinde açıyoruz, yani, data bus’a erkenden bağlanıyoruz. 2. Şarta pek uymuyoruz. Bir arduino pinini daha kullanıp 74245 OE sinyalini ayırıp Data bus’ı daha geç gönderip erişim zamanını ileriye alabiliriz (Bu, başka bir zamana kalsın ). Şimdilik bir sorun çıkmıyor. Devam edelim.

Bir not ; Analyzer kullanımında bu kadar çabuk sınıra geleceğimi düşünmemiştim.24 mhz olarak kullanmak genellikle mümkün olmuyor, 16 Mhz’e düşürmek gerekiyor.Sabırla kullanıldığında 24mhz ile 1000/24=41.6 nsn ölçüm hatası var. Arduinonun kendisinde de Ø2 high yakalarken 62.5 nsn clock hatası var.Yani max 100nsn cıvarında ölçüm hatası var. Ø2 den kaynaklanan hatanın seviyesini ise bilmiyoruz.
 
C64’ü değiştirdim ekmek kasaya bağladım. Okuma_yazma programı hata veriyor.
Başa döndüm: Önce yazma programını ele aldım.Ekmek kasada bu program da zaman zaman hata veriyor.

Hatanın sebebi nedir?  Bütün yazma döngüsü daha once de söylediğim gibi bir başlangıç noktasından ileri doğru 4-6 yazma işlemi boyunca kayıyor. Sonra bir c64 clock’u atlayıp yeniden başa geliyor. Yani yazma sinyalleri istenilen bölgenin dışına çıkıyor. Gezinme aralığı 416nsn ‘ye kadar çıkıyor. Bukadar hareketli bir sinyal yapısında yazmanın doğru olması bile şaşırtıcı.
7414 entegresi temiz olmayan,parazitli sinyalleri temiz hale sokan her derde deva bir entegredir.Daha once kullandığımda bir işe yaramamıştı ama o zaman uygun bir sinyal yapısı elimde yoktu.Şimdi herşey daha izlenebilir durumda. Ø2 yi iki adet not kapısıyla arduino’ya gönderdim. İnanması zor bir durum. Hiç bir faydası olmadı. Aynı gezinme devam ediyor.

7414 Ø2 clock’u analyzer ile aynı fazda, Analyzer Ø2 high ve low geçişlerini 7414 ile aynı yerde yakalıyor.

Epeyce dot Ø ile ilgilendim, bazan 2-4-8 ‘e bölerek Ø2 ile ilişkiye sokarak clock yapılarını izledim. dot Ø de aynı kayma davranışını gösteriyor.Yararsız..
Eldeki imkanlar fazla değil , bu aşamada işe yarar birşeyler yapmak gerekiyor.
Sonunda şöyle birşey denedim: yazma veya okuma başlangıcında  Ø2 High durumunu  while(bitRead(PINC,0)==0) ile okuyoruz . Bunun altına while(bitRead(PINC,0)==1) satırını koydum.
while(bitRead(PINC,0)==0);
while(bitRead(PINC,0)==1);
şeklini aldı. İlkinde Ø2 high durumu,ikincisinde low durumu algılanıyor. Bir türgecikme. Bu işlem işe yaradı : Kayma aralığı 200nsn’ye düştü. Bazan random bazan periyodik denilebilecek ama öncekinin yarısı bir gezinme. Şimdiye kadar karşılaştığım en iyi durum.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 13:59:14 ÖS
Kayıp ise bir adet fazladan C64 clock’u oldu. Biri ekmek kasa iki farklı c64 de denedim. Her ikisinde de ( Ø2 ile ilişkili) aynı kaymalara sahip sinyal örneği elde ediliyor.

6510’un R/W Timing ‘ne dönersek TRWS  ve TADS nin 100 – 300 nsn arasında olabileceğini söylüyor.

Buradan baktığımızda yazma sinyal dizileri için ortada bir sorun yok. C64 bu dizileri (bazılarını değiştirerek denedim) centilmence , hatta cömertce  kabul ediyor.16 mhz işlemcinin sinyal yetiştirememe diye bir sorunu da yok ,her şey yolunda yani.

Problemin çıktığı yer Ø2 veya dot Ø. Her ikisinde de erken ve geç clock yükselme yada düşme kenarları meydana geliyor. Herşeyi birkenara bırakıp c64 clock’nu terbiye etmeye çalışıyorsunuz. PLL tarzı birşeye girmeniz gerekecek , bu ise dış frekans ,fark bulucu..vs gerektirir  basitlikten uzaklaşırız. Yukarıdaki 200 nsn cıvarındaki kaymayı ve sinyal yapısını  kullanmaya devam edeceğiz.

8k yazma denemelerinde görünen şu : %90-95 doğru yazma , %5-10  ekranda (düşey olarak ekranın soldan itibaren 5-6 karakter genişliğinde bir tarafında)  5-8 gelişigüzel karakter gözükmesi oluyor. Bu %5-10 durumu daha önceleri de hatalı yazmaya neden oluyordu.Kaymayı (gezinmeyi) 200nsn içine çektiğimde  hatalı yazma azaldı ama hala var.

Bir konu : BA sinyali 24 defa(yaklaşık 500mikrosn high- yaklaşık 50mikrosn low) high-low dan sonra yaklaşık 7,7 milisn uzunbir high ve tekrar 24 high-low düzenine geçiyor. 24 lük peryot (25 adet Low),  ekran oluşturma ile ilgili. Diğeri ile birlikte tümü bir iç standart olmalı. 8k yazma hemen 2-3 kez bu 24 lik peryodun içinden( burayı da kullanarak) geçiyor.

Normal akış nesnasında yazılım  BA ‘nın High olduğunu gördüğünde ilerliyor.BA low ise bekliyor. BA  low olmak üzere High ın kenarına geldiğinde ise high ‘ı görüp herşeyi normal kabul ederek yoluna devam ediyor ve OE, R/W sinyallerini gönderiyor. Son sinyaller birçok zaman BA low’un içine düşüyor.

BA low VİC’e ait. Ø2 clock hem high hem low iki tarafını da kullanıyor.Müdahale etmiş oluyoruz.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 14:01:24 ÖS
BA LOW İÇİNE DÜŞEN SİNYAL


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 14:04:08 ÖS
OE ve R/W e girmeden once bir kez daha bitRead (BA)== high satırı koydum.Daha once BA low’un birkaç clock ileride içinde kalabilen sinyaller ortadan kalktı ama yine de bazı durumlarda BA low ilk clock’unda OE ve R/W sinyalleri olabiliyor.

Bu kez algoritmayı değiştirdim:

a-DMA giriş öncesinde BA’nın yukarıdaki 24 X kısa ve 1X Uzun olan High düzeninden uzun High düzenini yakalayan ve onun bittiği yeri bulan bir ek koydum. Böylece yazma veya okuma loop’unun her zaman ilk kısa BA High ile başlamasını sağladım. Nerede başlandığı bilinir hale geldi.

b-Başka bir ek ile kısa ve uzun BA high bölgelerine onların uzunlukları ile orantılı ayrı işlem yapan biri timer kullanan diğeri ise belirli sayıda işlemle ( iki ayrı yöntemle)  BA Low içine sinyallerin düşmesini engelledim.

Sayılı işlem yönteminde kısa ve uzun high için ayrı ayrı belirlisayıda çevrim yaptırıyorsunuz, kullanışlı değil. Test yapmaktayız, yazılım eklemeleri ile sayılar değişiyor. Pratik olmuyor. Ama bu yöntem final aşamada tercih edilebilir çünkü en hızlı yazma  veya okuma işlemi bu yöntemle gerçekleşiyor.

Diğer yöntem timer kullanmak. Arduino Timer yapılan okuma ,yazma sürelerini uzatıyor 3-4 Ø2 clock ile gerçekleşen yazma veya okuma 10-11 Ø2 clock na çıkıyor. 35 milisn olan 8K işlemi 115milisn ye çıkıyor. Bu yöntem ile Test yapmak kolaylaşıyor. Ek yazılım satırlarının herhangi bir engellemesi olmadan timer BA high süreleri bitime yakın iken işlemi durduruyor.

Bunların ardından şu sonuçları elde ettim:
 
1- Ekrandaki karakter gözükmeleri ortadan kalktı,
2- Yazma biri ekmek kasa iki C64 de hatasız hale geldi. Ikisinde de 100 defa denediğimde 100 defa doğru yazma yaptı. Okumada hala sorun var. yaklaşık % 10 hata veriyor.
Yazma tamam ama hala %100 anlamına gelmiyor, henüz test devam ediyor!


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 14:08:07 ÖS
Biraz ara verirsem; Başlarken amaçlarımdan biri arduino ile yapılacak DMA sınırlarının ne olduğunu anlamaktı. Bu sınırlardan ilki ortaya çıkmış oldu:

C64 Clock tek başına kullanılabilir durumda değil. Yeni bir clock oluşturmak gerekiyor. Bir mikroişlemci sadece loop içindeki yazılımı yürütebilir. Yazma yada okuma işini yaparken diğer yandan C64 clock’u ile ilgili bir işlem yapamaz. iki farklı işi ancak FPGA gibi paralel işlemler yürütebilen entegreler yapabilir. Şimdiye kadar yapılan C 64 DMA larında (sadece) bir mikroişlemci kullanarak yapılmış proje yok. (Ya da ben görmedim ?)  DMA nın olduğu yerde proje başka işleri yapabilecek değişik özelliklere de sahip olması gerekecektir. Yani kestirmeden mikroişlemciyi ikinci plana atmak zorunda kalırsınız ,daha yüksek clock kullanmanın avantajları , adres ve data bus için bol miktarda pin, istenilen değişik logic leri oluşturabilme olanağı..vb de diğer üstünlükler olur. DMA kullanan kartların CPLD türlü entegrelerle yapılmasının sebepleri bunlar olmalı.
……………………………


Konuya dönersek;
Test yapmak yazılım ve donanımda önemlidir. Düşük hata yüzdeleriyle çalışan projelerin bir zamanlar epey olduğunu zannediyorum. C64 kartuşlarda yaptığımız gereksiz resetlemeleri hatırlıyorum. Büyük olasılıkla testi yeteri kadar yapılmamış yazılım veya donanım hatalarından ileri gelen resetlemelerdi. C64 ‘ün (ekmek kasa ) içini açıp baktığımda kenarda el ile lehimlenmiş  diyodları görüp gülümsediğimi hatırlıyorum. Biraz da böyledir, herşeyi yetiştiremezsiniz, bazı şeyleri düzeltmek sonraya kalabiliyor,..

Neyse, biz elimizden geldiğince daha iyisini anlamaya ve yapmaya çalışalım.

Ara verip dönüp baktığımda işleri yavaşlatan şeyin yetersiz test şartları olduğunu gördüm, konuyu çabuk toparlayabileceğimi düşünmüştüm. Ama durum öyle değil. Yazmayı kontrol için her seferinde uzun basic satırını yazmak gerekiyor. Okuma için ise yazmanın doğru olduğunu varsayıp yine aynı şekilde basic satırlarıyla RAM okuması yapmak gerekiyor.
 
Yazma tarafındaki yazılımı tekrarlı şekline çevirdim (yazılı basic satırı yerinde kaldığından, beklemeli de olsa return ‘e basarak yazma toplamı kontrol edilebiliyor).

Okuma tarafını yazmadan bağımsız hale getirmek gerekiyor. Bunun yolu ttl-usb dönüştürücüsü, FTDI kullanmak,serial monitor’den izlemek. (Başlangıçta uzak durmuştuk). FTDİ için pin 12 ve 13 ü (B4 ,B5 ) software serial ile birlikte kullandım. B4 input R(X), B5 Output T(X) oldu. B4 zaten boşta, B5 ise Output ve clock74374 yükleme (OE high kaldığından, B5 in sinyal değiştirmesinin C64’e ulaşma durumu yok).


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 14:10:17 ÖS
Şimdi Okuma tarafını çözmeye çalışıyorum. Analyzer bu yetersiz haliyle bile her şeyin anahtarı. Okuma sinyallerine dikkatli baktığımda sinyallerin sürekliliği içinde bazı belirsiz bozulmalar var (8 K nın içinde belirli demek pek mümkün olmuyor..!). Bazan iki okuma OE sinyali arası açılıyor, bazan OE sinyali süresi birkac  Ø2 sinyalini kapsayacak şekilde uzuyor. Bir düzensizlik var.Bu tür aksamaları mikroişlemci bir tek nedenle yapar, birşeylerle meşgul olur,yani kendi iç işlerine bakar, yani interrupt..

Kullanmakta olduğum timer’lı test programı yerine saymalı program tipine döndüm, girişte interrupt’ı kapattım. Sonuç : Okuma toplam rakamları serial monitorde aynı olarak akmaya başladı. Boş RAM okuyorum. C64 açıldığında RAM FF,00 ve bazı adreslerde rastgele sayılarla doluyor. Her açıp kapamada farklı bir 8 K yı ama tekrarlayarak aynı sayıyı okumaya başladı.

Bu kez yazma _okuma programına geçtim. Daha once ROM okuyup RAM ‘e yazıyorduk. Şimdi RAM’e yazıp, okuyoruz.  0 dan 255 ‘e tekrarlayarak 8K yazıyoruz, Kontrol toplamı yine 1044480. Hatasız 200 adet yazma_ okuma.
 
Tuhaf bir durum var: temiz bir yazma okuma elde ettik ama  C64’ e kapat aç yaptığımda bazan birden bozulma başlıyor. Yine aynı sorudayız; ne olabilir? Yazılıma bakıyorum, hardware ‘i inceliyorum, birşey gözükmüyor. 100-200 defa sorun çıkmıyor,sonra birden arka arkaya bozulma başlıyor. Böyle birşey sinyal yapısından olmaz, softwareden de olmaz hardwarede olmalı. Nihayet buluyorum; üzerinde pek önemle durmadığımız, entegrelerin önüne bazan koyduğumuz bazan koymadığımız şu küçük 104 kondansatörlerinden birini Hardware karmaşasında  grnd ucunu boşta bırakmışım. Hatalı yazmalar ucu toprağa bağladığımda düzeliyor, ayırdığımda hemen  başlıyor.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 14:59:15 ÖS
demoit81xDBBmtQ


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 15:00:30 ÖS
8K yı RAM’e yazan ve okuyan Test programı ;


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 15:03:40 ÖS
8 Kbyte yazma 55milisn, okuma  54 milisn. Bu süreler 5-10 milisn daha düşürülebilir ama önemli değil.
 
Program hakkında kısa bilgi vereyim;
  1-Girişte ilk düzenlemeler ; integer sayıların atanması 5 sn   gecikmeyle C64 açılış sonrası kararlı hale gelmesinin beklenmesi,
  2-Loop başlangıcında, uzun BA high bölgesinin bulunması,
  3-DMA nın ilk kısa  BA High da başlatılması,
  4-8 K yazmanın kısa ve uzun BA high bölgelerinde yapılması
  5-Okuma için ilk BA kısa high bölgesinin bulunması
  6-8 K okumanın kısa ve uzun BA high bölgelerinde yapılması
  7-DMA ‘dan çıkış
  8-Serial Monitor’a okuma toplamının gönderilmesi
  9-C4’e (input) test için bir buton bağlandı. Low olduğunda(basıldığında) loop tekrarlıyor.
  10-2. Loop integer hazırlıkları

Programda Okuma silindiğinde Yazma, Yazma silindiğinde Okuma olur..

Amacım C64 DMA’sının 16 Mhz işlemci Arduino ile yapılıp yapılamayacağı ,mümkün ise bunun sınırları hakkında bilgi sahibi olmaktı . Sade diyebeceğimiz bir yapıda 1X74245 ,2X 74374 3 adet entegre kullanarak arduino (atmega 328p-pu) ile DMA yapılabilir durumda.

Sonrası bir sd kart veya bir serial ram, flash vs.bağlamak olur. Donanım olarak bunu yapmak kolay, yazılım ise zaman alacak bir iş.
 
Galiba sona geldik ,sanıyorum bu kadarı yeterli.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 15:05:00 ÖS
Son olarak;
Denediğim  biri yazma diğeri okuma sinyal örneklerinden ikisi aşağıda. Bu örneklerde VIC’e ait olan Ø2 low 500 nsn  bölgelerinden iki adedi (yazmada)R/W sinyali Low yapılarak,ayrıca adres ve data busları  C64 e bağlanmış haliyle tamamen kapatarak, işgal etmiş durumda. VIC burada okuma yapacaktır. (R/W high gereklidir), ayrıca adres ve data buslarını kullanacaktır. Bu örneklerin doğal sonucu “crash”, bilgisayarın çökmesidir. Oysa hatasız 8Kyazma ve okuma  örnekleridir.Programlardaki ara NOP gecikmesinin 40 NOP’a çıkartılmasıyla elde edilmiştir, DMA çıkışında da  6510 işine devam etmiştir.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 15:06:31 ÖS
40 nop okuma


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: msvstpl üzerinde Şubat 27, 2016, 15:07:12 ÖS
Bu sinyal örneklerini C64’e dair sahip olduğumuz  teorik bilgilerin ve 500 nsn ile ilgili kurduğumuz cümlelerin pek de sağlam olmadığına dikkati çekmek için koydum.VIC  BA low olduğu bölgede kendisine karışılmasına izin vermiyor,ama, BA High bölgesinde kendine ait Ø2 low 500 nsn aralığına girilmesinde de sorun çıkartmıyor. Buraya daha yakından bakmak gerekir.


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: AmigaMan üzerinde Şubat 27, 2016, 20:15:42 ÖS
Ellerine sağlık çok güzel çalışma


Konu Başlığı: Ynt: C64 ARDUINO DMA
Gönderen: EMREZ üzerinde Şubat 27, 2016, 23:00:50 ÖS
güzel çalışma. c64 gibi cihazlar 1mhz ama nelere kadir. birde bugün gördüğüm bir demo sonrası yok artık bu c64 olamaz diyorum ama c64 te ilginç müzik ve demolar var 64 k bir sim karttan fazla değil ama konu c64 olunca yapılıyor.