Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
Sayfa: 1 2 3 [4]   Aşağı git
Yazdır
Gönderen Konu: C64 ARDUINO DMA  (Okunma Sayısı 18393 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #45 : Ş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!


*  (227.18 KB, 1022x576 - Görüntüleme: 1386 kez.)
Logged
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #46 : Ş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).
Logged
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #47 : Ş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.
Logged
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #48 : Şubat 27, 2016, 14:59:15 ÖS »

demo
Logged
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #49 : Şubat 27, 2016, 15:00:30 ÖS »

8K yı RAM’e yazan ve okuyan Test programı ;

* C64 DMA Yazma_okuma.zip (3.06 KB - Yükleme: 123 kez.)
Logged
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #50 : Ş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.
« Son Düzenleme: Şubat 27, 2016, 15:11:07 ÖS Gönderen: msvstpl » Logged
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #51 : Ş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.


*  (217.79 KB, 1022x576 - Görüntüleme: 1258 kez.)
Logged
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #52 : Şubat 27, 2016, 15:06:31 ÖS »

40 nop okuma


*  (126.11 KB, 1022x576 - Görüntüleme: 1223 kez.)
Logged
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #53 : Ş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.
Logged
AmigaMan
Deneyimli
*****
Mesaj Sayısı: 604



Üyelik Bilgileri
« Yanıtla #54 : Şubat 27, 2016, 20:15:42 ÖS »

Ellerine sağlık çok güzel çalışma
Logged

Amiga ölmedi, efsane uyuyor
EMREZ
Deneyimli
*****
Mesaj Sayısı: 1.873



Üyelik Bilgileri
« Yanıtla #55 : Ş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.
Logged

this is amiga speaking.
Sayfa: 1 2 3 [4]   Yukarı git
Yazdır
Gitmek istediğiniz yer: