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 2 [3] 4 5 ... 15   Aşağı git
Yazdır
Gönderen Konu: Doberman (DMA Tabanlı Kartuş Projesi)  (Okunma Sayısı 151961 defa)
0 Üye ve 2 Ziyaretçi konuyu incelemekte.
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #30 : Eylül 29, 2015, 00:10:39 ÖÖ »

Golü insan genelde iyi olduğunu düşündüğü yerden yiyor. Şimdiye kadar bana genelde öyle oldu Ben yazılımda iyiyimdir diyorum, donanımda sorunu bulmaya odaklanıyorum, sorun yazılımda çıkıyor

Bazen bu son yaşadığın problemde olduğu gibi problem kabak gibi sırıtıyor ancak bizim odak noktası değiştiği için kolayca çözemiyoruz.

Güzel gelişmeler var, gayet iyi gidiyor proje.

Autorun için tavsiyem hades'in de önerilerinden biri olan kaset buffer'ına yahut stack'in dibine (günün birinde belki lazım olur) küçük bir kod parçası transfer et. Sonra da $0314/$0315'deki IRQ vektörünü buraya işaret et. Makine dili programları destekleyebilmek için pic kodunda yüklenen programın başlangıç adresini kontrol edebilirsin $0801 adresine yükleniyorsa basic programların çalışma şekline göre CLR ve RUN rutinlerini peşpeşe çağırabilirsin, herhangi bir adrese yerleşen makine dili rutini ise doğrudan indirect jump yapabilirsin.

Benim devrede işleyiş c64 tarafındaki kodun devreden datayı çekmesi üzerine kurulu olduğu için ben şöyle bir şey kullandım,

Kod:
	LDA DATA_LOW
CMP #$01
BNE MACHINELANG
LDA DATA_HIGH
CMP #$08
BNE MACHINELANG

JSR $A659 ;"CLR"
  JMP $A7AE ;"RUN"

Senin kontrol işini PIC'te yapıp uygun kodu göndermen lazım. Ya da free olan $FB-$FE aralığına yükleme adreslerini gönderirsen oradan da okuyabilirsin.

Yalnız iş burada bitmiyor, Interrupt rutinini ele geçirmiş olmak yetmiyor interrupt'a girilmiş olan kodu da dizginlemek lazım. Yani o interrupt'tan çıktığında esas CLR ve RUN'ı yapman lazım. Bu noktada benim bilgim de sınırlı. Benim devrede reset sonrası initialization kısmı kernal'den bağımsız kendi başına olduğu için benim böyle bir sıkıntım olmadı. Buna en yakın olanında da önyüzde koşan kod kendi kodum olduğu için durum sadece idle bekleyen kodu devam ettirme şeklinde oldu.

İlk aklıma gelen interrupt'a girildiğinde ilk dönülecek adresi stack üstünde değiştirmek geliyor. Evet sanırım çözüm bu.


Logged

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

twitter | blog
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #31 : Eylül 29, 2015, 01:34:45 ÖÖ »

Bu arada DMA ile yapılabilecekler noktasında 1541 Ultimate'in source'larından faydalanabilirsin.

https://xp-dev.com/svn/1541UltimateII/trunk/software/io/c64/c64.cc

Senin dokümanda paylaştığın yöntemin kod hali burada var.

ps: Kodlardan yanlış anlamadıysam bu vatandaş menüsünü bile DMA ile çiziyor
« Son Düzenleme: Eylül 29, 2015, 01:38:00 ÖÖ Gönderen: i_r_on » 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 #32 : Eylül 29, 2015, 09:36:00 ÖÖ »

Bu arada DMA ile yapılabilecekler noktasında 1541 Ultimate'in source'larından faydalanabilirsin.

https://xp-dev.com/svn/1541UltimateII/trunk/software/io/c64/c64.cc

Senin dokümanda paylaştığın yöntemin kod hali burada var.

ps: Kodlardan yanlış anlamadıysam bu vatandaş menüsünü bile DMA ile çiziyor

Enteresan. Vakit olunca incelemek lazım.
Aklımda bir ara onun kodlarına bakmak vardı ama ne zaman olur kim bilir.

2 - Bir kaç byte ile Klavye buffer kullanarak RUN komutunu vermiş gibi işlem yapmak.

Çok basit olduğu için bu sabah bunu denedim. Gayet güzel çalıştı.
PIC tarafındaki kod aşağıda;

void c64_basic_run(void)
{
   c64_start_dma();

   c64_poke(631,82);   // Keyboard Buffer 0 R
   c64_poke(632,85);   // Keyboard Buffer 1 U
   c64_poke(633,78);   // Keyboard Buffer 2 N
   c64_poke(634,13);   // Keyboard Buffer 3 <RETURN>

   c64_poke(198,4);   // Keyboard Buffer Count

   c64_stop_dma();
}


Ama birşey dikkatimi çekti. Arka arkaya 3 kez çalıştıktıktan sonra bir daha çalışmıyor.
Gerçi bu benim için bir sorun değil ama nedenini merak ettim.
Acaba bu buffer'a atılan bilgi otomatik olarak işlenince sıfırlanmıyor mu?
Keyboard buffer normalde 10 byte sanırım. RETURN gönderince, bir şekilde KERNAL bunu halletmiyor mu ki?
Yada bu buffer nasıl bir buffer, başı sonuna bağlı FIFO gibi mi acaba?

Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.757


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #33 : Eylül 29, 2015, 10:23:52 ÖÖ »

AAY-Helpfiles'a göre 10 byte FIFO.

http://unusedino.de/ec64/technical/aay/c64/zpmain.htm
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
hades
Üye
****
Mesaj Sayısı: 392



Üyelik Bilgileri
« Yanıtla #34 : Eylül 29, 2015, 12:40:16 ÖS »

Klavye bufferi kullanmadan önce C64'ü resetleyip çalışır hale geldikten sonra start_dma yapılsa daha iyi olmaz mı?
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #35 : Eylül 29, 2015, 13:17:23 ÖS »

Zaten oyle. Once reset. Sonra dma upload. En son klavye buffer ile run...
Logged

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



Üyelik Bilgileri WWW
« Yanıtla #36 : Eylül 29, 2015, 13:38:58 ÖS »

Kernal'e elleşmiyorsan reset sonrası makinenin kendine gelmesi için 2sn kadar beklemen lazım. Erken devreye giriyor olabilirsin.
Logged

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

twitter | blog
hades
Üye
****
Mesaj Sayısı: 392



Üyelik Bilgileri
« Yanıtla #37 : Eylül 29, 2015, 15:03:12 ÖS »

Doberman devredeyken 0 ve 1 nolu adresler okunduğunda hangi değerler dönüyor?
Eğer okunan değer 1 nolu adres için 37h ise buraya yazılacak yeni değer Dma 
Stoptan sonra c64'ü konfigure edecektir.
Belki de 6510 kendi içindeki 0 ve 1 adreslerindeki değeri ram'de mirrorluyordur.
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #38 : Eylül 29, 2015, 15:46:56 ÖS »

Doberman devredeyken 0 ve 1 nolu adresler okunduğunda hangi değerler dönüyor?
Eğer okunan değer 1 nolu adres için 37h ise buraya yazılacak yeni değer Dma 
Stoptan sonra c64'ü konfigure edecektir.
Belki de 6510 kendi içindeki 0 ve 1 adreslerindeki değeri ram'de mirrorluyordur.

Ilk firsatta denerim. Ben de merak ettim. Gerci ram de mirrorlandigini pek sanmiyorum ama deneyip yazacagim.
Logged

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



Üyelik Bilgileri WWW
« Yanıtla #39 : Eylül 29, 2015, 18:57:35 ÖS »

0 ve 1 adreslerine erişimler databus üstünde gözükmüyor. Cpu bunlara içerideki register'lar gibi muamele ediyor aslında.

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

Alıntı
For a fully compatible Kernal cartridge with no additional wire, another way must be used to find
out the state of /HIRAM. One obvious idea is to sniff the bus traffic and keep track on write
accesses to the address $0001. Unfortunately this does not work, since these accesses are kept
inside the 6510 CPU and are not visible on the bus.

« Son Düzenleme: Eylül 29, 2015, 18:59:40 ÖS Gönderen: i_r_on » 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 #40 : Eylül 29, 2015, 19:27:42 ÖS »

Evet bunu ben de okudugumu hatirliyorum zaten. Ama 6510 un pdf inde de enteresan birsey yaziyor. Portu input olarak tanimlarsan bu alana disaridan erisilebilir diyor. Yani buraya yazilabilir. E neden okunamasin o zaman?
By assigning the 110 Pins as inputs(using the Data Direction Registeo the user has the ability to change
the contents of address 0001 (the Output Register) using peripheral devices. The ability to change these

contents using peripheral inputs, together with Zero Page Indirect Addressing instructions, alfows novel an(
versatile programming techniques not possible earlier.
Logged

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



Üyelik Bilgileri
« Yanıtla #41 : Eylül 29, 2015, 19:29:40 ÖS »

0 ve 1 adreslerini kontrol için aklıma gelen tek seçenek şu. Kartuş 6510 soketine takılacak şekilde düzenlenecek. Yeni halinde 6510 kartuş üzerine takılacak ve bize lazım olan 1. adresin kontrol ettiği ve 6510 üzerinde bulunan P0, P1 ve P2 pinleri (LORAM, HIRAM ve CHAREN bitleri) Pic üzerinden kontrol edilecek. Kartuş devreye girip 6510'u disable ettiğinde Pic'in ilgili portları çıkış modunda, kartuş devre dışıyken giriş modunda olmalı.
Logged
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #42 : Eylül 29, 2015, 19:35:49 ÖS »

Sana bir ornekle açıklayayım.

Atmega işlemcideki C portunu düşün.

C portunun çip üstündeki fiziki pinlerinin karşılığı 6510'daki P0-P5 pinleri. Erişilebilirlikten kasıt bu.

DDRC 0 register'ına, PORTC de 1 register'ına karşılık geliyor.
Logged

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

twitter | blog
hades
Üye
****
Mesaj Sayısı: 392



Üyelik Bilgileri
« Yanıtla #43 : Eylül 29, 2015, 19:36:10 ÖS »

Benim tahminim şu şekilde. 0 ve 1 'e yazılan değerler aslında Ram'a yazılıyor. Yazma anında 6510'de bulunan bir adres decoder ile databustaki değer 6510 içinde latch edilerek ayrıca 6510 üzerindeki P0...P5 pinlerine gönderiliyor.
Datasheetlerde herşey belirtilmeyebilir. En iyisi delimawi'nin denemelerini beklemek.
« Son Düzenleme: Eylül 29, 2015, 19:37:57 ÖS Gönderen: hades » Logged
spunky
Deneyimli
*****
Mesaj Sayısı: 770


10 Çeşit insan vardır. Binary bilen ve bilmeyen.


Üyelik Bilgileri WWW
« Yanıtla #44 : Eylül 29, 2015, 19:58:30 ÖS »

Valla ellerinize, zihninize sağlık. Son dönemde forumda oluşan hareketlilik ve kaliteli bilgi artışı çok heyecan verici. Benim gibi yoğunluktan pasif üyeleri ve hatta gördüğüm kadarıyla bazı "ihtiyar" abileri bile heyecanlandırıyor Kahkaha

Hızınıs kesilmesin, Allah havyalarınıza zeval vermesin Kahkaha
Logged

A500+ |68020M-Tec Turbo,3.1 Rom, 4.5MB Ram, Indivision ECS, SCSI External CD-Writer, SCS2SD via A590|
A1200 |Apollo 040, 32MB Ram, 14" 1438|
Commodore 64c |SD2IEC,IrqHack,1084,Final III|
Amstrad CPC6128 |3.5" Hack|
Sega MDII, Sega MS, Ps1, Ps2, PS3, Micro Genius, A2600, PSP, Nintendo DS
Sayfa: 1 2 [3] 4 5 ... 15   Yukarı git
Yazdır
Gitmek istediğiniz yer: