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...