|
Konu Başlığı: Digimax yazılım Gönderen: i_r_on üzerinde Nisan 27, 2017, 01:12:05 ÖÖ Dün ve bugün resmen içim daraldı arkadaş,
Vanessa ablamızın sayfasındaki DigiMax projesini yapayım dedim. Geçen TL7226 DAC elime ulaştı hadi dedim girişeyim. Sayfa şurada : http://daconcepts.com/vanessa/hobbies/projects.html (http://daconcepts.com/vanessa/hobbies/projects.html) (http://daconcepts.com/vanessa/hobbies/commodore/projects/prototypes/DigiMAX-board.jpg) Elimde Userport konnektörüne uyan bir hazır pcb olmadığı için aşağıdaki gibi bir adaptör yaptım. (Aslında Jamma finger board vardı elimde fazla ama kıyamadım kesmeye) (http://www.commodore.gen.tr/forum/index.php?action=dlattach;topic=14188.0;attach=21139;image) Sonra donanımı dizmeye ara verdim, yaptıktan sonra test edecek bir şeyler lazım çünkü. Çalışıp çalışmadığını anlamam lazım. Nette aradım taradım ancak REU kullanmadan yahut bu user port'tan bağlanan Digimax'ı kullanan bir şey bulamadım. Emülatörde freezer kartuş ile kırılmış küçük bir 8-bit sample çalan bir şey bile olur diyecekken koda tekrar dönüp yaptığım bir kaç hatayı farkettim. (Aslında bu konuyu soru olsun diye açıyordum, şu an editliyorum.) Birinci hatam 6526 timer'ları ile son zamanlarda biraz fazla zaman geçirmekten olacak ki user port üstündeki /PA3 ve PA2 sinyallerini kafamda hep A timer'ının low byte'ının ilgili bitleri gibi kurgulamışım. Halbuki A portunun ilgili pin'leriymiş. Düşünüyorum da donanım gözüyle bakınca hakikaten timer'lar ile nasıl ilişkilendirmişim hayret. (Kaç defa da 6526'nın pin dizilimine bakmışken hele) Yine çalışmadı, bu sefer temiz kod yazacağım diye kullandığım sabitlerden bir ikisini yanlış tanımladığımı farkettim. Bu hatayı da düzeltince nihayet çalıştı :) Program içindeki bir kaç saniyelik ses kaydı Asereje parçasının başından. Bir şey çalsın yeter dediğim için özenmedim. (Kemal Sunal'dan Eşşoğlu Eşşek olsaydı süper olurdu :) ) Prg içinde 171. byte'tan itibaren isterseniz başka bir sesle değiştirebilirsiniz. Ses 11Khz mono 8 bit wav header'ı çıkarılmış olmalı. VICE'ta denemek için, Settings -> Cartridge I/O Settings -> Digimax Settings kısmından Enable Digimax işaretlenecek, DigiMax base ise Userport olarak seçilecek. (Elinde userport'a takılan digimax yahut herhangi bir dac olan varsa deneyebilirse çok sevinirim) Kod: LDA #89 ;985000/11000 = 89 Şu kısımda aritmetiği değiştirirseniz 44khz yahut 22khz de çaldırabilirsiniz. Tabii çaldırabileceğiniz sesin boyutu azalır ve interrupt handler'ı optimize etmeniz gerekir. Ben şimdilik sadece donanım çalışıyor mu çalışmıyor mu diye kullanmak için bodoslama yazdım. Sırada donanımı çalıştırma ve IRQHack64 ile kardeş ilan etme kısmı var, 44Khz 8 bit sınırsız wav bile çaldırırız belki :) Ekte kaynak kodlar ve PRG dosyası mevcut. Kod: ROM_IRQ_HANDLER = $FFFE Konu Başlığı: Ynt: Digimax yazılım Gönderen: eins üzerinde Nisan 27, 2017, 01:23:11 ÖÖ Ohhh eline saglik... bir de senkron video stream edince tam olacak... :)
Konu Başlığı: Ynt: Digimax yazılım Gönderen: i_r_on üzerinde Nisan 27, 2017, 01:25:59 ÖÖ Bu arada son dakika bug'ı buldum ilk post'taki içeriği edit'liyorum. Lan diyorum en az 3 saniye olmalıydı bu ne çabuk loop ediyor, interrupt'ı acknowledge etmeyince beklemeden sürekli interrupt'a giriyormuş :)
Play rutinine şunu eklemem gerekti. Ses hakikaten güzel çıkıyor :) Kod: LDX CIA_1_BASE + CIA_INT_MASK ; Acknowledge interrupt @delimawi : C64 camiasının eline vermemek lazım hemen öyle senkron video falan :) Macaristanda partiye gidersek orada release ederiz onu da :p Konu Başlığı: Ynt: Digimax yazılım Gönderen: eins üzerinde Nisan 27, 2017, 01:36:05 ÖÖ Herseyi hazirlayip niyetlenip Hollanda X'2016 ya son anda gidemedim bak bunu kacirmam. Gidelim diyorsan ben gelirim. Benim projeleri de release ederiz gavurlara... ;)
Konu Başlığı: Ynt: Digimax yazılım Gönderen: i_r_on üzerinde Nisan 27, 2017, 01:48:20 ÖÖ Herseyi hazirlayip niyetlenip Hollanda X'2016 ya son anda gidemedim bak bunu kacirmam. Gidelim diyorsan ben gelirim. Benim projeleri de release ederiz gavurlara... ;) Süper, partiye ikinci kişiyi bulduk :) Yalan olmasın ben epey niyetliyim, kesin gidelim. Dünya gözüyle bir parti görelim. Yalnız bizim projelerden de üretip götürelim, satış yapıp masrafları çıkarırız. Bir dolu c64'cü olur, alıcı bulur herhalde bizim mallar :) Konu Başlığı: Ynt: Digimax yazılım Gönderen: Levent (Lvnt) üzerinde Nisan 27, 2017, 08:37:49 ÖÖ Elinize sağlık. Vanessa ablanın sayfa da iyiymiş bu arada
Konu Başlığı: Ynt: Digimax yazılım Gönderen: i_r_on üzerinde Nisan 28, 2017, 01:44:09 ÖÖ IRQHack64 versiyonunda ses kalitesini ve frekansı tam tutturamadık ama en azından breadboard üstünde digimax'ımız ilk denemede çalıştı :)
Müziği C64 çalıyor evet, gerçi bir nevi Arduino C64'e paslıyor, C64'te digimax'a :) http://www.youtube.com/watch?v=a5NJUxaeuGg (http://www.youtube.com/watch?v=a5NJUxaeuGg) Konu Başlığı: Ynt: Digimax yazılım Gönderen: i_r_on üzerinde Mayıs 02, 2017, 00:51:09 ÖÖ http://www.youtube.com/watch?v=GlqwcDLTOfs (http://www.youtube.com/watch?v=GlqwcDLTOfs)
Bu arada çalma sistemini değiştirip bir deneme daha yaptım. Bu sefer frekansta kaymanın önüne geçtim. Önceki versiyonda zamanlamanın kontrolü tamamen arduino tarafındaydı, bunda c64'ün ürettiği cia irq interrupt'ı ile arduino sample'ları tedarik ediyor. Video oynatma çalışmasında farkettiğim bir detayı tekrar farketme imkanım oldu :) Sdfat kütüphanesi ile dosya erişimi üzerine bir kaç test yaptım. Dosyadan ilk byte'ı okumak 9000 mikrosaniyeye kadar ulaşabiliyor. Aynı şekilde 512 byte'ı ve sırasıyla sektör başlarındaki tüm okumalar böyle. Arduino tarafındaki interrupt rutininden sd kart erişimini çıkartıp ana program döngüsüne koydum, interrupt rutini birinci buffer'dan gönderim yaparken ana program döngüsünde ikinci buffer'ı doldurmaya çalışıyorum. Tabii burada sdfat kütüphanesi interrupt ile kesildiğinde (veya kesilemediğinde) nasıl bir cevap veriyor biraz muamma. Yani özetle, sd kartla da bu iş ek bellek / buffering çözümü olmadan hakkıyla olmuyor. Benim durumumda ideal çözüm datayı hem C64'de hem de arduino tarafında buffer'lamak. Arduino'ya 9000 mikrosaniyelik sektör okumaları için nefes aldırmak gerekiyor. Bunun için de düz hesap C64'de 128 sample'lık bir buffer tutup her 91 mikrosaniyede 1 yerine 2 sample göndermek lazım. Birincisi o an çalınacak sample, ikincisi 128 pozisyon ilerideki sample. Birini çalacak, birini buffer'layacak. 128 sample'ın çalması bittiğinde arduino'yu interrupt etmeyecek yahut arduino oralı olmayacak ve sıradaki 128 byte'lık buffer'ı dolduracak. Yapılabilir mi? Yapılır ancak ben üşendim, Atmega328'den (Sdfat 600 küsür byte hali hazırda kullanıyorken) 256 byte koparmak kısmı da sıkıntılı. Tüm bellekten çalmamak için lokal olarak tanımlamak, interrupt rutininde pointer'la erişmek lazım. Ancak tam o anda 256 byte boş yer yoksa sıkıntı. (200 byte da yetiyor bu arada ama 2'nin üslerine malum takığız) Atmega328 üstündeki toplam ram 2K bu arada :) Bu işin donanımsal bir alternatifi de arduino c64 arasındaki veri iletişim kısmına 1K/2K bir fifo bellek koymak. Bu şekilde arduino'nun toplam veri okuma kapasitesini c64'e yansıtmak mümkün. |