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ı 33417 defa)
0 Üye ve 2 Ziyaretçi konuyu incelemekte.
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #30 : Aralık 12, 2015, 15:50:52 ÖS »

Yöneticimiz Simon'dan  Yanıt 23 deki 116 KB dosyayı silmesini rica edeyim.
Logged
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.756


Commodore Forever


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

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #32 : Aralık 12, 2015, 16:22:42 ÖS »

Simon teşekkür ederim.Tamam.
Logged
AstronBnX
Üye
**
Mesaj Sayısı: 20


Üyelik Bilgileri
« Yanıtla #33 : 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.
« Son Düzenleme: Aralık 12, 2015, 18:54:17 ÖS Gönderen: AstronBnX » Logged
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.756


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #34 : 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ş.
Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
LW3D
Yönetici
*****
Mesaj Sayısı: 11.418


Günü Kurtaran Avam Hiooargggh :)


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

i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #36 : 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
Logged

Every imagination is one's self reflection but not every self reflection is imagination. <I.R.on - 2001>

twitter | blog
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #37 : 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,
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #38 : 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..
« Son Düzenleme: Aralık 14, 2015, 23:53:51 ÖS Gönderen: msvstpl » Logged
msvstpl
Üye
***
Mesaj Sayısı: 64


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



* YAZMA.JPG (746.68 KB, 1158x1544 - Görüntüleme: 1551 kez.)
Logged
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #40 : Şubat 27, 2016, 13:52:57 ÖS »

Okuma


* OKUMA.JPG (539.26 KB, 1061x1415 - Görüntüleme: 1498 kez.)
Logged
msvstpl
Üye
***
Mesaj Sayısı: 64


Üyelik Bilgileri
« Yanıtla #41 : Şubat 27, 2016, 13:54:23 ÖS »

DATA


* DATA.JPG (620.03 KB, 1061x1415 - Görüntüleme: 1369 kez.)
Logged
msvstpl
Üye
***
Mesaj Sayısı: 64


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


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


Üyelik Bilgileri
« Yanıtla #44 : Şubat 27, 2016, 14:01:24 ÖS »

BA LOW İÇİNE DÜŞEN SİNYAL


*  (217.15 KB, 1022x576 - Görüntüleme: 1443 kez.)
Logged
Sayfa: 1 2 [3] 4   Yukarı git
Yazdır
Gitmek istediğiniz yer: