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)
commodore.gen.trGenel KategoriProjeDoberman (DMA Tabanlı Kartuş Projesi)
Sayfa: 1 ... 5 6 [7] 8 9 ... 15   Aşağı git
Yazdır
Gönderen Konu: Doberman (DMA Tabanlı Kartuş Projesi)  (Okunma Sayısı 152103 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
LW3D
Yönetici
*****
Mesaj Sayısı: 11.418


Günü Kurtaran Avam Hiooargggh :)


Üyelik Bilgileri WWW
« Yanıtla #90 : Ekim 05, 2015, 22:35:17 ÖS »

Fiyat falan çok bilmiyorum da benim sonraki iki projem de fpga var. Gene paylaşırım buradan detayları. 1541 emulatoru ve full c64 yapacağım fpga ile...

    Kahkaha  Sustum
Logged

eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #91 : Ekim 06, 2015, 00:32:41 ÖÖ »

Denemelerde border rengi değişiyordu ama bu değişim pic tarafından doğrudan $d020'ye mi yazılarak yapılıyordu yoksa önce C64'e yüklenen bir rutin tarafından mı yapılıyordu bilmiyorum. Kesin cevabı delimawi verir.

Doğrudan DMA ile IO bölgesine erişiliyordu. C64 te çalışan bir rutin yok orada.

Eğer $d020 pic tarafından değiştiriliyorsa benim açımdan bunun anlamı Pic C64'ün IO bölgesine erişim yapabiliyor demektir.
Daha geniş düşünürsek Pic ile C64'ün klavyesi kontrol edilebilir, Sid kullanılabilir, joystickler okunur vs.

Evet bunların hepsi yapılabilir. Yani 0 ve 1 adreslerindn IO bölgesi kapatılmamış ise IO bölgesine erişilebilir. Emin olmak için DMA yapmadan önce bir kere reset gönderilebilir, yada C64 ilk açıldığında bu işler başlatılabilir, yada en kötüsü 0 ve 1 adreslerini düzenleyecek bir ufak kod gene DMA ile C64 te çalıştırılabilir.

Ve gelelim yeni scene dediğim konuya. Pic üzerinde çalışan bir intro / demo yazılabilir.
Mesela pc kullanarak pic için bir program yazılacak, sd karta aktarılıp doberman-64'e takılacak. Pic çalışmaya başladımı sd karttaki demo pic'in içine aktarılacak (böyle bir özellik var mı bilmiyorum) ve yazılan kod C64'te Vic, Sid , Cia gibi çipleri kontrol edecek.
Mesela C64'ün Ram'ine fli grafik atıp pic tarafında fli viewer çalışacak.
Ne bileyim belkide hız nedeniyle yapılamayan bazı efektler varsa pic bunları rahatça yapabilir.
Kartuşun adı da PIC-64 olabilir. Ama ufak bir sorun var. Hangi Pic kullanılmalı. Yazılacak kodlar Pic portlarını kontrol edeceğinden Pic standart olmalı.
Neyse aklıma gelen uçuk bir fikirdi. Sözü delimawi'ye bırakıyorum.

Açıkçası bir şekilde bu yapılabilir ancak i_r_on'un bahsettiği gibi bu tarz girişimler scene dünyasında pek rağbet görmüyor. Zaten bu projenin de aslında temel amacı sadece hızlı bir şekilde kod atmak ve C64 hafızasını dump edebilmek vb. Yani live çalışacak bir işlem için düşünmemiştim ben DMA yı.

İllaki PIC kullanmak ta şart değil ama PIC örneğinden devam edecek olursak, şunları söyleyebilirim:
- Güncel 8 bit PIC ler 16MIPS çalışabiliyor. Yani C64'ün 16 katı hızında.
- Bu tarz işler yapmak için PIC ile C64 clocklarını senkronize etmek gerekiyor. Yoksa demo için vb işe yaramaz olur. Bu kolaylıkla yapılabilir. 16MHZ civarı çalışan bir VCO yapılacak, üretilen frekans 16 ya logic olarak bölünüp, kartuş portundaki 1MHz C64 clock'u ile karşılaştırılıp frekans hatası üretilecek. Bu hata low pass filtreden geçirilip VCO ya feedback olarak girilecek. Yani aslında bir nevi PLL. C64'ün 1 MHZ hızını 16 ile çarpmış oluyoruz. Bu tarz bir işi daha önce yapmıştım, 1-2 entegre ile halloluyor.
- Esas sıkıntı ise şu ki, Doberman64 ün var olan donanımı ile bir adrese bir veri atabilmek için;
  Adres High Byte Latch (3 PIC Cycle)
  Adres Low Byte LAtch (3 PIC Cycle)
  Data Set (1 PIC Cycle)
  RW Set (1 PIC Cycle)
  DMA START (1 PIC Cycle)
  Wait Complete (1-2 C64 Cycle + 1-2 PIC Cycle)
  DMA STOP (1 PIC Cycle)

Yani bir adrese poke yapabilmek için neredeyse 1-2 C64 Cycle harcanıyor.
PIC'in getirdiği 16MIPS avantajı kaybetmiş olduk.

Peki ne yapılabilir?
Amaç tüm C64 çevrebirimlerini başka bir CPU ile kontrol ise, açılıştan itibaren DMA hep low'da tutularak, 6510 hiç çalışmadan, doğrudan Adress, Data ve RW hattı ile kontrol ele alınabilir. Bu durumda bacak sayısı daha çok olan bir PIC seçilir. Yani 16 Bit adres ve 8 bit data'nın tamamı doğrudan kullanılır. Böylece latchlere gerek kalmaz ve işlem çok daha hızlı olur.

Sonuç olarak, amaç bu ise bu işe uygun bir donanım tasarlanmalı. Yapılması gayet olası, ama buna gerçekten ihtiyaç var mı? Pek emin olamıyorum açıkçası...

Benim aklımda olan bir diğer projeden bahsetmem gerekirse, tüm C64'ü FPGA içerisinde software olarak oluşturmak istiyorum. Bu yapıldı zaten. Ultimate-II hatta DTV de bile kullanıldı. Ama benim yapmak istediğim, data ve address hatlarını fiziksel olarak FPGA dışarısına taşımak. Bu ne getirecek? Herhangi bir chip'i (Özellikle hedefim SID mesela), soft olarak emüle etmeden gerçeğini kullanabilme şansı verecek. Yani FPGA içerisindeki bir yada daha çok chip'i disable ederek dışarıdan gerçeğini bağlayabilmeyi hedefliyorum.

Şimdi bunu sizin isteiğinizle birleştirirsek şu ortaya çıkıyor. 6510 dışındanki tün chipleri gerçek kullan, 6510 yerinede hayal ettiğiniz herhngi bir CPU'yu, hatta belkide olmayan örneğin hades marka bir CPU'yu FPGA içerisinde tasarlayarak, bu CPU ile C64 çevrebirimlerini kontrol etmek olası. Hatta ana CPU C64'ün çok farklı bir hızında bile çalışabilir...
« Son Düzenleme: Ekim 06, 2015, 00:35:55 ÖÖ Gönderen: delimawi » Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #92 : Ekim 10, 2015, 17:55:48 ÖS »

Merhaba,

Bugün bir kaç saat zaman ayırabildim, Metallic ile daha önce konuştuğumuz The Last Ninja'nın depacker'sız halini çalıştırmak için bazı çalışmalar yaptım, sonuçlar gayet güzel.

Öncelikle Metallic'e teşekkür ederim, depacker'sız, introsuz, demosuz kılçıksız halde The Last Ninja'yı hazırlayıp denenem için verdi.

The Last Ninja'nın açılmış haldeki imajı $0812 den RAM'in sonuna kadar yer kaplıyor. Bu büyüklükte bir imajın C64'e upload edilmesi Doberman64 için herhangi bir problem teşkil etmiyor, yarım saniyenin de altında imajın yüklenmesi sağlanabiliyor. Ancak bu DMA upload işleminden önce, ROM ların kapatılmış olması gerekiyor ki, upload edilen imaj çalışabilsin. Aksi halde RAM bölgesi üzerindeki KERNAL ve BASIC ROM görünür olacağı için imaj çalışmayacaktır.

Bu konu hakkında forumda arkadaşlarla çeşitli yöntemleri değerlendirmiştik. Bugün denediğim yöntem şu oldu:

Temiz açılmış yada RESET'lenmiş C64'e önce Doberman ile küçük bir kod atılıyor. Bu kod interruptları, ROM'ları ve I/O bölgesini kapatıyor. Bu sayede tüm C64 RAM'i açılmış oluyor. Sonra belirli bir adresi set ederek döngü içerisinde, set etmiş olduğu adres DMA tarafından başka bir değere set edilene kadar beklemeye başlıyor. Son olarak döngüden çıkınca upload edilmiş imajın JMP değerine sıçrayarak programın çalışmasına yol veriyor.

Atılan bekleme kodunu $0800 den aşağıda bir yere koymak istedim çünkü DMA yükleme işlemi genelde $0800 üzerine yazacaktır, daha önce konuştuğumuz üzere seçtiğim yer tape buffer oldu. Ayrıca interruptları da kapatıyoruz çünkü ROM'lar iptal edilince timer vb bir interrupt ile, RAM bölgesindeki bir yere sıçranmasını istemiyorum. Çıkışta şimdilik interruptları kapalı bıraktım, nasıl olsa yüklenmiş olan imaj init sırasında hem 01 adresini hem de interrupt configürasyonunu kendi istediği gibi ayarlar diye düşündüm.

Doberman'ın yüklediği kod aşağıda:

*   =$033F
   SEI      ; Disable Interrupts
   LDA #$01   ; Set Flag to Ready
   STA $033C
   LDA #$34   ; Turn off ROM's & IO
   STA $01      

loop:         ; Wait DMA Complette   
   LDA $033C
   CMP #$02
   BNE loop
   JMP $9C00  ; Goto Program Start
   
   
Bu kodu Doberman upload ederken en sondaki JMP adresini yüklediği imajın start adresi olarak set ediyor. Kodun çlıştırılması için şimdilik eski yöntemi kullandım, keyboard buffer'a SYS831+ENTER tuşları atılıyor ve DMA serbest bırakıldığı anda kod çalışıyor. Bu işi daha sonra NMI ile yapmak üzere kafa yoracağım.

Ara yüklemeli oyunlara Doberman'ın destek vermesi için gerekli olan ilk adımı atmış olduk. Şimdi Ninja'nın ara yükleme kısımlarına bakacağım. Fakat oyun oynama konusunda o kadar yeteneksizim ki, ilk bölümün sonuna hızlı bir şekilde nasıl gelebileceğim konusunda en ufak bir fikrim yok. Kahkaha

Tekrar Metallic'e teşekkür ederken ufak bir video ile bitiriyorum günü. Ekranda SYS831 yazısını gördüğünüz an DMA işlemi başlıyor ve introsuz, depacksiz, kılçıksız Ninja 0.5 sn de çalışıyor.

« Son Düzenleme: Ekim 10, 2015, 18:15:51 ÖS Gönderen: delimawi » Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Decypher
Deneyimli
*****
Mesaj Sayısı: 689



Üyelik Bilgileri
« Yanıtla #93 : Ekim 10, 2015, 19:39:49 ÖS »

Muhteşem.

Bilgilerinizi birbirinizle ve bizlerle paylaşıp takip etmesi bu kadar heyecanlı projeler ürettiğiniz için ne kadar teşekkür etsek azdır herhalde.
Logged
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #94 : Ekim 10, 2015, 20:37:02 ÖS »

İyi iş çıkmış. Bence oyunu oynamadan sonuna en hızlı dma ile gelirsin

Bir kaç poke ile iş bitebilir, cracker arkadaşlar yardımcı olsun.
Logged

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

twitter | blog
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #95 : Ekim 10, 2015, 23:49:02 ÖS »

Öncelikle Metallic'e teşekkür ederim, depacker'sız, introsuz, demosuz kılçıksız halde The Last Ninja'yı hazırlayıp denenem için verdi.
Rica ederim =)

Ara yüklemeli oyunlara Doberman'ın destek vermesi için gerekli olan ilk adımı atmış olduk.
İkinci adım olarak level yüklemelerde c64'ün dobermanı tetiklemesini sağlaman lazım, dobermanın şu anki donanımına ek yapmadan bunu nasıl yapmayı düşünüyorsun? Benim başlıkta belirttiğim gibi geçici bir çözüm olsa da ninja'ya özel olmamalı, genel olarak diğer programlarda da kullanılabilmeli.

Şimdi Ninja'nın ara yükleme kısımlarına bakacağım. Fakat oyun oynama konusunda o kadar yeteneksizim ki, ilk bölümün sonuna hızlı bir şekilde nasıl gelebileceğim konusunda en ufak bir fikrim yok. Kahkaha
Hehe bölümü bitirmene gerek yok, en baştaki trainer da ikinci bölümü seç =)

Kodun çlıştırılması için şimdilik eski yöntemi kullandım, keyboard buffer'a SYS831+ENTER tuşları atılıyor ve DMA serbest bırakıldığı anda kod çalışıyor.
Yalnız bu keyboard buffer yönteminin kullanılamayacağı bir durum olan Commando örneğini konuşmuştuk. Yani CBM80 yöntemiyle reset yapılmasının engellendiği durumlar. İlk oyunu çalıştırabileceksin, ama Commando gibi bir oyundan sonra ikinci oyunu yükleyebilmek için c64 resetlenemediğinden kapatılıp açılması gerekecek. Bu çok can sıkıcı bir durum, çünkü bir tek Commando değil, bir sürü oyun var bu şekilde olan. Yakın zamanda oyun paketleme işlerini yaparken çok karşılaştım bunlarla. Özellikle eski kısa oyunların çoğu bu şekilde.

Bu işi daha sonra NMI ile yapmak üzere kafa yoracağım.
Doberman NMI yaptığı an $e000-$ffff aralığına yani kernal rom'u yerine bir rom map'leyeceksen olabilir, fc3'te olduğu gibi.

Reset'ten sonra CBM80 yöntemini kullanabilirsin demiştim önceki mesajlarımda, uygulayabilmen mümkün değil mi?
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #96 : Ekim 11, 2015, 01:17:38 ÖÖ »

Reset'ten sonra CBM80 yöntemini kullanabilirsin demiştim önceki mesajlarımda, uygulayabilmen mümkün değil mi?

Burada tam olarak anlayamadığım bir durum var.
Seneryo anladığım kadarı ile şu şekilde. C64 Reset anında KERNAL'daki bazı rutinleri çalıştırıyor, sanıyorum memory test vb. Sonra da CBM80 kontrolü yapıp, eğer uygun kod varsa dallanıyor. 

Peki bu seneryoda Doberman ne zaman devreye girmeli? Reset bitmeden RAM'e erişim yaparsam, KERNAL rutini benim yazdığım datayı ezebilir gibi geliyor test esnasında. Reset bittiğinde bu işi yaparsam da, KERNAL'in CBM80 kontrolünü kaçırmış olacağım. Tam netleştiremedim açıkçası bu olayı.

C64'ün açılış ve RESET anında tüm yaptıklarını bir flowchart olarak kağıda döküp bir anlamam gerekiyor sanırım önce.
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #97 : Ekim 11, 2015, 01:30:56 ÖÖ »

Aslında çözüm burada basit değil mi? Kartuş imzasının ve vektörlerinin bulunduğu bölgeyi reset öncesi boşaltırsan senin reset'ine engel olamaz. Oyunun bu bölgeyi ROM'a çevirme şansı da yok. $8000'de başlayan default bir rom yok, $A000'da başlayan basic var ancak reset yediğinde 6510 herhalde $00 ve $01 register'larını default değerlerine alıyordur.

Buradan kernal'in exrom ve game sinyallerine bakmaksızın kartuş imzasını kontrol ettiğini de çıkarabiliriz. (Gerçi nasıl kontrol etsin o da ayrı konu )
Logged

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

twitter | blog
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #98 : Ekim 11, 2015, 01:37:52 ÖÖ »

>delimawi   c64 açılırken ya da reset yapıldığı an doberman hemen 6510'u durduracak ve dma ile $8000 adresine CBM80 kodunu koyacak. Sonra 6510'u serbest bırakacak. 6510 yoluna devam edince normal reset rutinine geçmeden önce CBM kodu var mı diye kontrol edecek ve bulduğu için de ona dallanacak. CBM80 kodunda da önce bir reset/init bölümü olacak. 6510 bu bölümü tamamlayınca bir bekleme kodunu teyp tamponuna transfer edip, oraya dallanarak beklemeye başlayacak. Bunun ardından doberman, ikinci dma'yı yaparak oyunu belleğe yükleyecek, bitince 6510'u beklemeden çıkarmak için kullanılacak flag'i sıfırlayacak. 6510 da yoluna devam edecek ve oyunu çalıştıracak.
« Son Düzenleme: Ekim 11, 2015, 09:11:31 ÖÖ Gönderen: Metallic » Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #99 : Ekim 11, 2015, 01:38:47 ÖÖ »

Exrom ve game hatlarina bakmadigini biliyorum. Bu hatlari sadece hardware olarak adres space e kartusun epromunu map etmek icin kullaniyor. Hatta cbm80 yontemi ile kartuslar rom a yazilmadan once debug edilebiliyor ramdeyken.

Diger konu icin haklisin, reseti engelleyen oyunlar icin cozum olur ancak benim aradigim sadece bu degil, keyboard buffer degil daha solid bir yontem ile dma ile attigim kodu run etmek istiyorum.
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #100 : Ekim 11, 2015, 01:41:59 ÖÖ »

@metallic, gene bir sikinti var. Dma bir bad line olusmadan baslayamiyor. Reset bitmeden de sanirim vic bad line olusturmuyor.

Reset aninda bad line olmadan dma yapabilecek miyim denemem lazim. Saniyorum reset basladigi anda daha 6510 hic calismadan araya girersem olabilir.
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #101 : Ekim 11, 2015, 01:46:20 ÖÖ »

Aslında çözüm burada basit değil mi? Kartuş imzasının ve vektörlerinin bulunduğu bölgeyi reset öncesi boşaltırsan senin reset'ine engel olamaz. Oyunun bu bölgeyi ROM'a çevirme şansı da yok. $8000'de başlayan default bir rom yok, $A000'da başlayan basic var ancak reset yediğinde 6510 herhalde $00 ve $01 register'larını default değerlerine alıyordur.

Buradan kernal'in exrom ve game sinyallerine bakmaksızın kartuş imzasını kontrol ettiğini de çıkarabiliriz. (Gerçi nasıl kontrol etsin o da ayrı konu )
i_r_on söylediğin yöntem işe yarar, ama dobermanın reset yapıldığı an 6510'u durdurup $8004'deki CBM80 imzasını bozması lazım. Doberman eğer bunu yapabiliyorsa, $8000'e kendi CBM80 kodunu da yazabilir ve onun üzerinden 6510'u yönlendirebilir.
Logged
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #102 : Ekim 11, 2015, 01:50:42 ÖÖ »

@metallic, gene bir sikinti var. Dma bir bad line olusmadan baslayamiyor. Reset bitmeden de sanirim vic bad line olusturmuyor.

Reset aninda bad line olmadan dma yapabilecek miyim denemem lazim. Saniyorum reset basladigi anda daha 6510 hic calismadan araya girersem olabilir.
Bad line beklemesiz bir dma bekliyoruz senden =) Umarım bir çözüm bulursun.

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



Üyelik Bilgileri WWW
« Yanıtla #103 : Ekim 11, 2015, 01:52:49 ÖÖ »

Aslında iş dönüp dolaşıp 1541 ultimate'in yöntemine geliyor. Reset gerektirmeksizin dma yapabilmek lazım. Yani ekran kapalı olsa da devre 6510'a bir dur kardeşim diyebilmeli.
Logged

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

twitter | blog
Metallic
Uzman
*****
Mesaj Sayısı: 1.081



Üyelik Bilgileri
« Yanıtla #104 : Ekim 11, 2015, 02:23:03 ÖÖ »

Aslında iş dönüp dolaşıp 1541 ultimate'in yöntemine geliyor. Reset gerektirmeksizin dma yapabilmek lazım. Yani ekran kapalı olsa da devre 6510'a bir dur kardeşim diyebilmeli.
i_r_on  ultimate'in dma'dan sonra 6510'u nasıl yönlendirdiği ile ilgili bilgi var mı?
Logged
Sayfa: 1 ... 5 6 [7] 8 9 ... 15   Yukarı git
Yazdır
Gitmek istediğiniz yer: