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   Aşağı git
Yazdır
Gönderen Konu: C64 DMA ?  (Okunma Sayısı 28334 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« : Eylül 17, 2015, 12:02:07 ÖS »

Merhaba,

Bir proje için aklıma takılan bir durum var.
Hiç cartridge slottan C64 için DMA kullanan oldu mu?
Yapmak istediğim DMA low'a düşürüp, A/D bus'ını ele alıp, doğrudan C64 RAM'e ulaşmak. (Yazmak veya okumak.)

Bunun için bildiğim kadarıyla DMA'yı low a düşürmek ve BA sinyalini beklemek gerekiyor.
VIC'in Bus'a ihtiyacı olup olmadığını anlamak için BA yı dinlemek şart.
Ayrıca DMA'yı da kafamıza göre çekemiyoruz, CPU'nun komut işletmiyor olması gerekiyor, yada 3 clock cyc beklemek gerekiyor, eğer yaptığı bir iş varsa bitirmesi için.

Alternatif olarak, benim projede DMA esnasında VIC'e ihtiyaç olmadığı için VIC kapatılabilir. Bu durumda BA dinleme ihtiyacı yok. Ama BA'yı dinliyor olmak ta DMA'yı aşağıya çekme anı konusunda yardımcı olabiliyor. Yani BA dinlenerek, VIC bus'ı aldığında DMA request edersek, zaten VIC CPU'yu beklemiş olacağından, VIC'in işlemi biter bitmez DMA yapabilir durumda olacağım.

Esas kafama takılan ise, diyelim ki doğru zamanlama ile DMA başlattık. R/W ile de RAM'e okuma ve yazma yapabilir olacağız. Bu esnada Phi2 ile senkronizasyon yapmak gerekir mi?

Bir yerde okuduğum kadarı ile işlem şu şekilde olmalıymış:

 Wait for PHI2==high + BA==high
  Set DMA==low

  Repeat while PHI2==high + BA==high
    Set A0-A15 + D0-D7
    Set R/W = low     

Burada neden Phi2==High beklemek lazım diyor arkadaş?

Teşekkürler,
Logged

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



Üyelik Bilgileri WWW
« Yanıtla #1 : Eylül 17, 2015, 13:02:49 ÖS »

Daha fazla yazarim sonra da. Phi2 ye senkronize olma sebebi vic'in bad linelar haricinde de surekli bus'a 6510'u engellemeyecek sekilde interleaved olarak erismesi.

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 #2 : Eylül 17, 2015, 13:22:46 ÖS »

Yani BA hattı müsait olarak göründüğü halde VIC bus a erişiyor mu?
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
ilkerficicilar
Uzman
*****
Mesaj Sayısı: 1.122


Üyelik Bilgileri WWW
« Yanıtla #3 : Eylül 17, 2015, 21:38:58 ÖS »

Dinamik RAM refresh olayı.
Logged

http://cbm.ficicilar.name.tr/ - Commodore Hacking
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #4 : Eylül 17, 2015, 22:01:17 ÖS »

Yok BA hattı da ona uygun olarak değişiyor. Ancak bir cycle'ı her zaman 6510 ile VIC paylaşıyorlar. VIC her zaman bus master olarak hareket ediyor. 6510'a ne zaman bus'a erişeceğini, ne zaman adres bus ve data bus'a bağlantısını tristate etmesi gerektiğini dikte ediyor.
VIC sadece okuma yapıyor, 6510 ise hem okuma hem de yazma. Her cycle'ın (phi2) low fazında vic okuma yapıyor. Yüksek olduğu anları ise 6510'a bırakıyor.

Badline'larda ve sprite gösterilen yerlerde ekstra okuma yapma ihtiyacı olduğu için 6510'u RDY üstünden kesip ihtiyaç duyduğu okumaları tamamlıyor.

Ekranı kapattığında badline'lardan ve sprite okumalarından kurtuluyorsun ancak vic phi2'nin birinci fazında bus'ı sürmeye devam ediyor.

Aslında bus müsaitliğini veren AEC pini var VIC'ten 6510'a beslenen. Bu doğrudan 6510'a bus pin'lerini tristate etmesi gerektiğini söyleyen pin. Ancak kartuş üzerinde bu sinyal yok. Hani olsa yüksek frekanslı bir micro,fpga, cpld ile bu hattı ve RDY hattını kullanıp 6510 kardeşim dur şimdi sıra bende diyebilirsin. Dediğin gibi 6510'un o anda ne yaptığına göre de zamanlama yapman onu doğru yerde RDY ile kesmen lazım.

Şurada süper bilgiler var konu ile ilgili : http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt

Aynı konu ile ilgili daha dün epey bir okumuştum. Ben de indirect dma yapmaya çalışıyorum. Benim durumumda ekranı kapatmam yetiyor çünkü ram'i doldurmak için bus'ı kullanmayacağım. Benim sid player'da kullandığım tekniğin bir değişiğini kullanacağım.

Yapmaya çalıştığının biraz daha gelişmişi ancak skoe'nin easyflash'ta nasıl kernal rom replacement'ı tasarım dokümanı var

şurada : http://skoe.de/kernal/kernal-cartridge.pdf

Cpld içinde bildiğim kadarıyla küçük bir 6510 emüle ederek normalde okuma erişimi olmayan 0/1 adreslerindeki portları okuyabiliyor. Senin yapmaya çalıştığın timing'i de 25mhz cpld ile nasıl senkronize ettiğini anlatmış.
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 #5 : Eylül 17, 2015, 23:03:11 ÖS »

Teşekkürler dökümanları inceliyorum hemen.

Esasen devam eden emekleme aşamasında FPGA tabanlı iki projem var. Ama forumdaki kartuş projelerini görünce gene heveslendim. KISS CART Vb...

Daha önce tartışılmış olan microişlemci tabanlı kartuş emulatorü işini PIC ile denedim. 64MHZ 16MIPS ile çalışan bir mikroişlemci ile kartuş emulasyonu işi için yaklaşık 16 cycle zaman varmış gibi görünüyordu. Kullandığım PIC'lerde bulunan Paralel Slave Port özelliği de tam bu işe uygun gibi. PIC'in 8 Bitlik bir portu data bus olarak tanımlanıyor ve WR RD CS hatları için tanımlı pinler mevcut. Dışarıdaki master CS pinini low a çekip RD yada WR işlemi yaptığında PIC te bir interrupt oluşuyor ve data bir register'a aktarılıyor yada okuma işlemi ise yapılan register'daki data bus'a aktarılıyor. Yani databus in out yada tristate olmasını PIC donanım tabanlı kendisi hallediyor bu işler için cycle harcamak gerekmiyor. Adres bus da doğrudan PIC'e input olarak bağlanabilir. Denediğim şey şu oldu. Adres bus değiştiği anda işaret ettiği bilgiyi register'a koyunca geri kalan işi PIC hallediyor. Ancak aslında 16cycle zaman varmış gibi görünse adres değiştikten sonra maksimum 600ns gibi bir zamanda datayı hazır etmek gerekiyor. Kısaca clock un başlarında adres değişiyor ve ikinci yarısında C64 datayı okuyor. Yani maksimum 8-10 cycle da data hazır olmalı.

Teoriyi test etmek açısından yaptığım hardcoded dataları kartuş olarak C64 e mapleyebildim. Ancak bu 8-10 cycle gerçek bir kartuş imajını emule etmeye yetmedi.

Ben de bunun üzerine kartuş portuna takılan ucuz (gene PIC tabanlı) bir donanım ile kartuşun yaptığı işin tam tersini yapmayı düşündüm. Yani C64 kartuştan datayı çekmeyecek, PIC seçilen imajı doğrudan RAM'e dolduracak. Imajlar da SD kart, USB-PC, seri EEPROM yada Seri Flash üzerinde tutulabilir. Yöntem değişmiyor. Donanım üzerinden imaj seçilecek ve işlem başlatılınca PIC DMA ile imajı RAM'de olması gereken yere yazacak. Bu sayede tek parça olan tüm program ve oyunları ucuz bir şekilde tek kartuşa boyut sınırı olmaksızın yerleştirebilirim diye düşünüyorum. Hatta umduğum gibi çalışır ise, gene tek tuş ile RAM okunarak snapshot alınabilir, başka işler için çeşitli donanımlar C64 ün RAM bölgelerine maplenerek veri alışverişi yapılabilir vb.

Planladığım kadarıyla donanım çok basit olacak. İki tane 573 adress latch output olacak. PIC latchlere yazmak yada okumak istediği adresi latchleyecek. Dolayısı ile tek bir 8 bit bus 16 bit adresleme için de yeterli olmuş olacak. Databus doğrudan PIC'e bağlı. Normal durumda port input yani C64'e karşı high z. Imaj seçilip upload edilmek istendiğinde, PIC DMA'yı uygun zamanlama ile low a çekecek. Sonrasında da BA dinlenerek, her bir Phi2 clockunda bir byte DMA ile transfer edilecek. Eğer herhangi bir anda PIC datayı yetiştiremez ise bile sorun olmaz, PIC datasını mediadan okuyup hazır edince RD/WR line'ı assert eder vb.

Sadece Phi2, BA, DMA hatları için uygun logic'i kurarak latchlerin OE eneble PINlerini PIC'den bağımsız sürebilir olmalıyım.

Neyse çok uzattım, şu dökümanlara bir bakacağım. Haftasonu bir kaç deneme yapmak istiyorum.



Logged

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



Üyelik Bilgileri WWW
« Yanıtla #6 : Eylül 17, 2015, 23:49:47 ÖS »

Özay'ın Kiss Cart'ı herkesin iştahını kabarttı

PIC'te kullandığın 16 bit adres portunu Phi2 low iken read moduna getirmen lazım yoksa vic'in address bus'a koyduğu adresi ezersin. VIC hunharca kullanıyor phi2 low iken adres ve databus'ı. Buraya bağlı her şey tristate edilmek durumunda.

1. Badline'ları handle edebiliyor olman lazım. Senin transfer rutini ilk başladığında badline'a denk gelirse mantarlar. Bu yüzden başlangıçta senin donanım rom gibi davranıp c64'de kod çalıştırmaya başladıktan sonra dma çalıştırmalı. Ekran kapatılabilir yahut ekran kullanılacaksa kod trick'leri var dma'yı badline'lara getirmemek için. İmajı bilgisayar yerine donanım üstünden seçtirmek gereksiz yere maliyeti arttırır. Expansion port'un verebildiği max. akım'a da dikkat etmen gerekir ekran falan eklersen. Az güç tüketen oled'ler kullanılabilir belki.

2. Exrom ile elleşmemen lazım. Senin tasarımda yok anladığım kadarıyla o yüzden sorun olmaz. Elleşirsen $8000-$9FFF aralığını ram olarak kullanamıyorsun. (1'de bahsettiğim rom olayına girersen c64'de çalışan koda senkron bir şekilde exrom'u tekrar high'a çekip ram'e erişimi açman gerekebilir)

3. 6510'un iyi zamanına denk gelmek için sanırım counter da kullanman lazım. En az 3 cycle beklemek gerekiyor. Discrete logic yerine GAL kullanırsan board'dan ve kablodan tasarruf edersin. Counter kullanmak yerine PIC'i senkronize edeyim dersen sanırım o iş daha zor olur. Assembly kasıp cycle'ları sayman lazım.

Paralel slave port özelliği güzelmiş bu arada. Gelişmeleri merakla bekliyorum.

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 #7 : Eylül 18, 2015, 00:13:51 ÖÖ »

Dökümanlar çok iyiymiş bu arada. Şimdi çok daha iyi anladım. Zaten her clock ta gerekmese bile hem 6510 hem de VIC erişiyor bus'a. VIC dediğin gibi Phi2 low ken kullanıyor her clock da. Ayrıca bad line sprite vb durumlarında, Phi2 high iken bile kullanıyor, 6510 bekliyor. Bu durumu da BA hattı ile anlayabiliyoruz vb. Bu arada resmen VIC master bu makinada. CPU neredeyse köle...

Aynen hem BA müsait hem de Phi2 high iken output address latch enable olacak. GAL PAL vb kullanılabilir ama öncelikle discreete logic yapmayı deneyeceğim. Olabildiğince basit olsun istiyorum.

Imaj seçimini yazılım olarak yapmak tabiki her yönden daha hoş. Ama bu yazılımın için ROM bulundurmam gerekecek. Bunu istemiyorum. ROM'u de emule edemedim, yetişmedi hız. Belki şu olabilir. Yeni öne sürdüğüm yöntem ile bir loader atılır önce C64 RAM e. Seçilen imaj bilgisini donanıma gene bir RAM adresi üzerinden gönderebilir yazılım.

Ben imaj seçimi için 128x64 1 inch OLED leri düşünmüştüm. Hem ucuz hem estetik hem de kullanımı kolay.

Tekrar teşekkürler...
 

 
Logged

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



Üyelik Bilgileri WWW
« Yanıtla #8 : Eylül 18, 2015, 01:11:35 ÖÖ »

C64'e senin devre ile dma yapmayı başarırsan şöyle bir problemin daha olacak. O kodu execute etmen lazım

Badline'ları yakalamak için BA'nın normalden daha uzun low olarak seyrettiği pattern'i yakalayabilirsin alternatif olarak. Clock input'u phi2 olan bir counter ile yapılabilir ama karışık olur.

Ama daha basiti başlangıçta dma'yı BA sinyaline bağlı olarak yavaşça startup kodunu doldurmak için kullanabilirsin. Ama VIC 6510'a geç dediğinde 6510 da sallıyorum 2 cycle iş yapıp üstüne badline'a basma ihtimalin nedir dersen, var muhtemelen. Tekrar tekrar denersen en fazla VIC'e hatalı read yaptırmış olursun herhalde ve ekranda beklenenden farklı bir display ile karşılaşırsın. Ancak cpu'nun read/write fazlarına elleşmediğin için en azından cpu crash olmaz.

Aktardığın kodu execute etmek için de şu tip yöntemler kullanabilirsin.

1. Önce uygun bir lokasyona çalışacak kodu aktarırsın. Sonra $0314/$0315'deki IRQ handler'ı bu lokasyon ile ezersin. Default CIA timer interrupt'ı 60hz ile çalışıyor.

https://www.c64-wiki.com/index.php/Interrupt

Bunun da riskli tarafı sen vektörün yarısını değiştirmişken diğer yarısını 6510 hali hazırda okumuş olabilir. Cpu crash olur. NMI vektörünü değiştirirsen kartuş üstünden kendin NMI'ı tetikleyip kodunu çalıştırabilirsin.

https://www.c64-wiki.com/index.php/Interrupt

2. İkinci yöntemde de stack'e dibinden itibaren kodunun lokasyonunu basarsın (simetrik olmalı, $0202 gibi). Hali hazırda çalışan interrupt rutini içinde RTS geçtiği anda senin koda dallanır.
Şurada okumuştum bunu : http://www.pagetable.com/?p=568

Gerçi bunu load işlemi için anlatmış. $EA31'deki default Interrupt handler içerisinde RTS geçiyor mu bakmak lazım.

Bu arada yazma imkanın varsa 32 byte prom'lar var böyle bir şey kullanabilirsin, yahut 6502.org'da kafa patlattığımız GAL'i rom gibi kullanma olayını kullanabilirsin.

http://forum.6502.org/viewtopic.php?f=10&t=3383
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 #9 : Eylül 18, 2015, 10:09:18 ÖÖ »

Evet ben de zaten kodu nasıl çalıştıracağım diye düşünüyordum. Aklıma ilk gelen RESET vektörü değiştirip, RESET çakmaktı ama C64 ten 15 yıl uzak kalınca unutmuşum detayları. RESET vectör kernel içerisinde olduğu için salt RAM erişimi ile bunu yapmak mümkün değil.

IRQ vektörlerini değiştirmek olabilir dediğin gibi ama iki byte'ı tek seferde atomik olarak update etmek mümkün değil gibi görünse de bence denenebilir. Neden dersen, bu işlem sırasında DMA yı low da tutacağım için, 6510 hold ediyor olacak. (DMA sanırım doğrudan RDY pinine bağlı, kontrol etmem lazım) Yani ben DMA yı release etmeden zaten 6510 hiçbir işlem yapmayacak diye umuyorum.

Zaten önce bir şu DMA upload olayını test edip teoriyi onaylamak önemli. Sonra bir şekilde kod çalıştırılır. En kötü RUN yazıp RETURN bile yapılır ilk aşamada... Kahkaha


Logged

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



Üyelik Bilgileri WWW
« Yanıtla #10 : Eylül 18, 2015, 10:56:15 ÖÖ »

Byte byte yapacağım dediğin için dedim, hani bir byte dma yapıp 6510'a yol verirsen bahsettiğim durum oluşabilir.

Evet işin büyüğü dma'yı yapmakta, kod execute etmenin yolu bulunur.
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 #11 : Eylül 19, 2015, 00:23:47 ÖÖ »

Bugün biraz vakit ayırabildim, öncelikle şu VIC-6510 paylaşımını detaylı olarak inceledim.
Sondurumda toparldıklarımı özetlemek gerekirse;

6510 tarafında:

- AEC (Address Enable Control) bacağı low'a çekildiğinde adres, data ve RW pinini boşa bırakıyor. (High-Z) Bus'ı diğer chipler kullanabiliyor.
- RDY bacağı low'a düşürüldüğünde, işlemci yapmakta olduğu işlemi bitirip beklemeye başlıyor. Eğer RDY bacağı low'a çekildiğince bir yazma işlemi yapıyorsa bu maksimum 3 cycle sürebiliyor.

VIC-II tarafında:

- Her cycle da Phi2 low iken bus'a VIC erişiyor. Bunu senkronize etmek için VIC, AEC bacağını low'a düşürüyor ve 6510'un her cycle'in ilk yarısında High-Z olmasını sağlıyor.
- VIC'in AEC hattı ile, kartuş portundaki /DMA hattı bir and kapısı ile 6510'un AEC bacağına bağlı. Normalde /DMA pull-up ile high durumda olduğundan, 6510:AEC = VIC:AEC

- Bad Line vb sebepler ile, clock'un ikinci yarısına da ihtiyaç duyarsa bunu BA (Bus Available) hattını low'a düşürerek 6510'a bildiriyor.
- VIC'in BA hattı ve /DMA hattı bir and kapısı ile 6510'un RDY bacağına bağlı. Normalde /DMA pull-up ile high durumda olduğundan, 6510:RDY = VIC:BA

Kartuş Portu ve /DMA:

- Kartuş portundaki /DMA hattı normalde pull-up edilmiş durumda yani high.
- /DMA hattı 6510'un hem AEC hemde RDY hatlarına birer and kapısı üzerinden bağlı. Yani /DMA low'a çekildiğinde, VIC'in durumu ne olursa olsun, hem 6510:RDY low, hem de 6510:AEC low olacak.
- Bu durumda 6510 yaptığı işlemi bitirecek ve bekleme durumuna düşecek. Bu da maksimum 3 cycle sürecek.
- Ancak yanlış zamanda /DMA low edilirse, 6510'un AEC bacağı da low'a düşeceğinden, yapmakta olduğu işlem var ise bitirememiş olacak. (İstenmeyen durum)
- /DMA hattını Phi2 ile senkronize bir şekilde high-low yapmaya gerek yok. İşlem süresince low da tutulabilir. Zaten Phi2 nin ilk yarısında da VIC biz low a çekmesek bile kendisi çekecekti.
- İşlem sırasında BA hattı devamlı olarak kontrol edilmeli, eğer VIC BA hattını low'a düşürürse, clock'un ikinci yarısına ihtiyacı var demektir. En kısa sürede adress, data ve RW bacağı High-Z hale getirilmeli. (Burada sanırım aynı şekilde 3 cycle zamanımız olabilir Ney)
- Ancak işlem sırasında BA low'a düşse bile /DMA hattını release etmeye gerek yok. BA tekrar high olduğunda 6510'a nefes aldırılmadan işleme devam edilebilir.

Seneryo:

- Doğru zamanda /DMA'yı low a çekmek: Bunun için aklıma gelen kolay yöntem, BA hattını dinlemek;
- VIC BA'yı low a çekerek bus'ı ele aldığında bir süre bekleyerek /DMA'yı low yapmak. (En az 3 cycle ama zaten VIC 40 cycle a yakın BA'yı low da tutyor zaten, zamanlama kritik değil.)
- Örneğin BA low olduktan 5us sonra /DMA yı low'a çekersek 6510'un bekleme halinde olduğundan emin oluruz. Yani özellikle Bad Line beklemiş oluyoruz.
- /DMA'yı low da tutarak BA'nın tekrar high olmasını, yani VIC'in bus ı bırakmasını bekle.
- BA tekrar low olana kadar bus artık bizim. Sadece Phi2 nin high olduğu durumlarda adres, data ve RW yi sür. Pih2 low iken bus BA high olsa bile Bus VIC'in.
- İşlem sonunda /DMA yı release et.

Taslak Şema:



Şimdilik taslak şema bu şekilde. Yazma anında Phi2 ile tam senkronize olabilmek için data output hattına da bir 573 ekledim.
Çalışma mantığı şu şekilde olacak:
- PIC asenkron olarak, okumak yada yazmak istediği adresi ADDR_HI ve ADDR_LO latchlerine latchleyecek.
- Bu esnada henüz, ADDR_EN, DATA_EN ve WR_EN bacakları low olacağı için, C64 tarafına giden gelen bir veri yok.
- Yazmak isteniyorsa, aynı zamanda yazılacak byte DATA ya latchlenecek.
- 16bit adres ve 8bit data hazır olunca, özellikle Phi2'nin low olması beklenecek (NOT: Eğer zaten low değil ise...) (Zamanlama kritik değil.)
- Phi2 low iken yani bus'a VIC erişiyor iken, ADDR_EN, eğer yazmak istiyorsak, ek olarak WR_EN ve DATA_EN high edilecek.
- Bu durumda da Phi2 low olduğundan, halen C64 tarafına giden gelen birşey olmayacak.
- Phi2 high olur olmaz, Latchlerin /OE'leri low a düşeceğinden senkronize olarak veri C64'e gidecek.
- Phi2 tekrar low olduğunda, WR_EN, DATA_EN ve ADDR_EN low edilip bir sonraki byte hazırlanacak ...

PIC'in RA portunu da C64 ten data okumak için boş bıraktım ama sanırım proje 28 pin'e sığmayacak.
44 pin bir PIC'e geçmek gerekebilir.

Yarın bir deneme yapmak istiyorum, bakalım teori çalışacak mı?
Logged

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



Üyelik Bilgileri WWW
« Yanıtla #12 : Eylül 19, 2015, 11:32:24 ÖÖ »

BA konusunda haklısın. Ben okuduğumda Phi2 her low olduğunda da low olacak anlamı da çıkarmıştım. Şimdi bir daha okuyup başka bir yerden de baktım. Evet sadece standardın dışında ekstra okuma yapacaksa low'a çekiyor bu sinyali VIC.

Şuraya bakılabilir.
https://sh.scs-trc.net/vic/vic_article_3.6.htm

Senin kartuş kullanılmadan önce c64'ün resetlenmiş olacağını yahut senin resetlemen gerektiğini varsayıyor olman lazım bu arada. Zira her zaman 40 cycle kadar uzun low'da tutmuyor bu sinyali VIC. Sprite erişimi varsa bu daha kısa sürebiliyor. Veya sallıyorum c64'de ekran kapalı iken BA'yı low'a sonra da tekrar high'a düşmesini beklemek doğru olmaz.

1. BA'yı dinlemek için interrupt mı yoksa ön tarafta çalışan kod mu kullanacaksın?
2. Şemada DMA hattını bağlamayı unutmuşsun sanırım?


Bu iş olur bence.

Sana bir iki tavsiye :

1. Devreye koyduğun tüm elemanları dışarıdan besle. Kartuş portunun verdiği VCC'yi kullanma. Yük bindirme durumunda VIC ve/veya 6510 sakata gelmesin.

2. Başlangıçta tanıyabileceğin ufak bir pattern'i transfer etmeye çalış. Ufak bir basic programı ile kontrol edebilirsin. Bir sonraki aşamada program transfer edip kontrol edebilirsin.
Logged

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

twitter | blog
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.757


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #13 : Eylül 19, 2015, 12:26:57 ÖS »

Elektronik ve Commodore 64 donanım bilgim sizin kadar olmasa da, bazı yerlerini anlamasam da bu tarz başlıkları okumayı seviyorum. Aynen devam.
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
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #14 : Eylül 19, 2015, 15:11:15 ÖS »

Selamlar tekrar.
Kartus su sekilde calisabilir diye dusunuyorum;
Uzerinde bir button olabilir. Butona basilinca pic once c64 e reset cakar sonra BA beklemeye baslar. Bu sayede bad line olusacagina emin olabilir. Zaten butona basilinca aktif olacagi icin kod o esnada dongude BA beklemeye baslar. Interrupta cok da gerek yok.
Ikinci seneryoda kartus takili olarak c64 resetlenirse devreye girebilir. Butonu olmaz. Yani normal kartus gibi calisir.

Ben ilk deneme olarak dma raster line yapmak istiyorum. 53280 adresine dma dan veri atacagim bakalim neler olacak. Sonra dedigin gibi pattern ve ufak tefek basic programlar denenir.

Acikcasi pic ve diger logicler cok cekmez diye dusunuyorum. Toplam da 80 100 ma besler herhalde c64? Yaniliyor muyum acaba. External besleme gerekirse bu is hic user friendly olmaz...

Sema dedigim gibi taslak. Dma hatti ve reset hatti vb yok orada. Haklisin.

Aslinda 3 adet 573 ve nand kapilari icin bir cpld koyup kirtulsam mi diye dusunmuyor da degilim. Elimde atmel atf1504 lerden var ama 44 pin. Herseye yetmez sanirim.

Simon,

Eger anlamadigin ve merak ettigin detay varsa seve seve aciklamak isterim.

Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Sayfa: [1] 2 3   Yukarı git
Yazdır
Gitmek istediğiniz yer: