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 KategoriProjeIRQHack64 - EPROM Kullanan :) Prg Yükleyici Kartuş
Sayfa: 1 2 3 [4] 5 6 ... 19   Aşağı git
Yazdır
Gönderen Konu: IRQHack64 - EPROM Kullanan :) Prg Yükleyici Kartuş  (Okunma Sayısı 114508 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
i_r_on
Uzman
*****
Mesaj Sayısı: 2.865



Üyelik Bilgileri WWW
« Yanıtla #45 : Eylül 28, 2015, 00:55:31 ÖÖ »

İşlem tamam şimdilik. Çok sayıda oyunla test etmek (Misal giana sisters'da ne hikmetse karakter grafikler tamamen kayıp) ve menü yazılımı artı ona destek veren arduino kodunu geliştirmek gerek.

Bu arada videoda gösterilenden daha hızlı çalışması gerekiyor, arduino tarafında sd kart okumasını buffer üstünden yaparsam gerçek performansına ulaşır.

c64 tarafındaki nmi rutinine nostaljik olsun diye border rengini arttırma komutu ekleyip 6 cycle daha yavaşlattım rutini Boş ekranda beklemesinden iyidir.

Son videosu şu şekilde,

<a href="http://www.youtube.com/v/_A_VE8G0PsQ&rel=0" target="_blank">http://www.youtube.com/v/_A_VE8G0PsQ&rel=0</a>
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.865



Üyelik Bilgileri WWW
« Yanıtla #46 : Eylül 28, 2015, 22:19:54 ÖS »

Bu arada source'ları olan c64'de çalışacak, kendini relocate edebilen bir sidplayer var mı bildiğiniz? Bu donanıma uyarlamak istiyorum. Hvsc'nin sayfasındakilerin hiçbirinin source'larını bulamadım.
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 #47 : Eylül 28, 2015, 23:49:43 ÖS »

Tebrikler,
Loaderın da hayırlı olsun. Daha benim loader notepad++ da sketch halinde...
Şu bordür rengi nostaljisini çok hoşuma gitti. Bunu bende yapmak istedim ama malesef benim projede yer bulamadı kendine...
Sırada ne var, PCB yapacak mısın?
Logged

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



Üyelik Bilgileri WWW
« Yanıtla #48 : Eylül 29, 2015, 00:20:25 ÖÖ »

Ne şematik ne de pcb tasarımı konusunda becerikli olduğumu söyleyemem (bakınız geçmiş projelerim)

Özay'dan bir güzellik bekliyorum, yaparsa bu işi o yapar

İşin software kısmı ise tam bir derya deniz. Şunu yapsam deyince arkasından da bir sürü şey geliyor. En basitinden mmc64'ün yaptığı bir kaç şeyi yapayım desen uğraşır durursun. Varsa open source bir şeyler bizim devrelere uyarlanabilir.

Hatta bu konuda paslaşabiliriz. Benim bu konuda ilerlemeye enerjim olur mu onu bilemiyorum gerçi

Benim gördüğüm güzel özellikler,
- Takılan medyadan dosyaları browse etme
- D64/T64 desteği (en azından adam içini açıp içinden prg gönderebilsin)
- Sid player
- Disk dump etme (Sürücüden sd karta yahut tersi)
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 #49 : Eylül 29, 2015, 00:36:07 ÖÖ »

Evet işin software kısmı aynen dediğin gibi. Ben açıkçası projeye başlarken öngördüğüm bir kaç temel özellik dışında fazla detaya girmek istemiyorum, dediğin gibi derinlere inmeye benim de enerjim yetmez.

Ben ilk kart için SD yerine flash çizdim, kolayıma geldi. Ama zaten SD de flash da SPI haberleştiği için gerekiyorsa dönüştürlebilir birbirlerine. Flash için elimde daha önceden yazmış olduğum kodlar var, onlardan kullanırım. SD işine hiç girmedim ama microchip'in kütüphanesi var, henüz incelemedim, kullanılabilir diye düşünüyorum benim projede.

D64 browse işini düşündüm, ama bunu acaba basit bir PC yazılımı ile yapmak daha mı mantıklı. Yada yapılmışı yok mudur?

SID player güzel olur. Senin bu konuda tecrüben de var bildiğim kadarı ile. Aslında güzel bir player çözümü bulabilirsen yada yaparsan ben de yararlanmak isterim. Loader'e eklenecek bir özellik sonuçta.

Ben temel özellik olarak, loader'ı bitirebilirsem bir de DMA FREEZE işine girmeyi istiyorum. Aslında bunun temel sebebi, en azından çok parçalı oyunları ayrı imajlar olarak kaydedip, bir şekilde çakma da olsa örneğin Last Ninja vb yi de destekleyebilmek. Bir de tabi bu yapılabilirse, nasılsa DMA çok hızlı, herhangi bir oyun o anda FREEZE edilip sonra UNFREEZE edilebilir gibi bir ek özellike olmuş olacak.

Alakasız olacak ama, C64 multi color için tasarladığım bir imajı bölünmüş olarak sprite datasına çeviren bildiğin bir PC tool var mı? Loader'da ihtiyacım var da?

Logged

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



Üyelik Bilgileri WWW
« Yanıtla #50 : Eylül 29, 2015, 00:56:46 ÖÖ »

Şu program epey işini görür : http://www.ajordison.co.uk/screenshots.html

Ancak grafikten sprite çıkarma özelliği var mıdır bilemedim. Benim de bu konularda hafızam ta 94-98 arasında kaldı.

Flash / SD kart kullanımına gelince bence SD kart kullanım kolaylığından dolayı ağır basıyor gibi. Ben default kullandım zira arduino'da kullanımı kolay. Flash'a göre temini de daha kolay. Flash'ı Paralel arabirimli kullanacak olsaydın ikisi de olsun derdim. Flash'a usb üstünden seri arabirim yapıp mı transfer yaptırmayı düşünüyorsun bu arada?

D64 konusunda kullanıcıyı PC'ye göndermek çok da kullanışlı bir çözüm olmaz. D64'ü parse eden falan open source kod gani ganidir. Kolayca port edilecek bir tanesini bulup kullanmak lazım. Tabii PIC'in benim durumumda atmega işlemcinin sınırları bizi biraz zorlayacaktır.

Çok parçalı oyunlarda oyunun durumunu nasıl halledeceksin? Oyundan oyuna state'in nerede saklandığı değişir çünkü. Gerçi bazı oyunlarda doğrudan level değiştirmiş oluyorsun sanırım onlar için olabilir.


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



Üyelik Bilgileri WWW
« Yanıtla #51 : Eylül 30, 2015, 23:19:48 ÖS »

Son yaptığım geliştirmelerle ilgili detaylı bilgi vermemiştim. Kısa bir özet geçeyim.

C64'e veri göndermeyi hallettiğim noktada işin bir de geriye Arduino'ya veri gönderme kısmı vardı. Bunun için aklımda daha önceden kartuş i/o bölgesine yaptığım okumaları belli bir düzende yapmak ve arduino'nun da LORAM sinyalini dinlemesi ile gönderilen bilgiye ulaşmasını sağlamak vardı. Bir nevi covert channel communication*, sinsi ama yavaş. Sonra aklıma hali hazırda kullandığım interrupt'ları kullanmak geldi.

Hali hazırda IRQ ve/veya NMI interrupt'larını hem Arduino tarafından üretip 6510'da yakalayabiliyorum veya 6510'da üretip Arduino'da yakalayabiliyorum. Transfer sırasında Arduino'da bu pinlerin bağlı olduğu io pinleri output iken, transfer sonrası input'a çekiyorum.

Arduino uno üzerinde kullanılabilecek 2 tane interrupt pin'i var. 2 veya 3 no'lu pinler. NMI'ı menü aktifken arduino'dan c64'e transfer de yaparım düşüncesi ile IRQ kullanmaya karar verdim.

Bu noktada aklıma ilk gelen çözüm raster interrupt'larını kullanmak oldu. Öncelikle çok da hızlı olmayacak bir çözüm üstünden gittim. Başlangıçta seçim listesinde kaçıncı sayfada, hangi prg'yi seçti gibi bilgiler iletileceği için çok hızlı bir çözüme de gerek yok çünkü. (Disk dump etme gibi bir ihtiyaç olursa işler değişir.)

Öncelikle tek byte transfer edeyim dedim sırf çalıştığını göreyim diye. Elimde olan istediğim raster'da IRQ yaratabilmek, bununla ayrıca arduino'yu da interrupt edebiliyorum. Boş boş duruyor zaten bir şey yapmıyor

Gönderimi sağlayabilmek için c64 tarafında bir durum makinesi (state machine) kurdum. Belki daha basit bir kodlama ile yapılabilirdi ancak bu şekilde işin içinden çıktım. Akla gelen ilk implementasyon çalışmayınca sağlama almaya çalışıyor insan. Durum makinesinin özel bir kolu olan transducer (geçişlerde bir de çıkış veren durum makinesi) mantığını kullandım.


Durumlar :
S0 : Başlangıç durumu,
S1 : 0 state'i
S2 : 1 state'i

Çıktılar :
A : Bir sonraki IRQ 0. satırda,
B : Bir sonraki IRQ 160. satırda

Durum geçişleri şu şekilde,

S0'da iken
- Son bit 0 ise S1 state'ine geç, Çıktı : A
- Son bit 1 ise S2 state'ine geç, Çıktı : B

S1'de iken
- Sıradaki bit 0 ise S1 state'inde kal, Çıktı : A
- Sıradaki bit 1 ise S2 state'ine geç, Çıktı : B

S2'de iken
- Sıradaki bit 0 ise S1 state'ine geç, Çıktı : B
- Sıradaki bit 1 ise S2 state'inde kal, Çıktı : A


S0 state'ini interrupt'ları set eden ön taraftaki kod oluşturuyor, S1 state'i bir irq rutini, S2 state'i ise diğer bir IRQ rutini. Efektif olarak yapılan şey ise 0 bilgisi gönderilecekse IRQ oluşturulduktan sonra tam bir ekran taraması bekleniyor (1000 / 50 = 20ms), 1  bilgisi gönderilecekse yarım ekran taraması bekleniyor (20 / 2 = 10ms) . Arduino gelen interrupt'lar arasındaki zamanı ölçüp 1 mi gönderilmiş 0 mı gönderilmiş anlıyor.

Tabii işler teorideki gibi pratikte yolunda gitmiyor, ilk gönderilen bit için raster'a senkronize olmak lazım yahut ilk gelen interrupt bilgisini başlangıç kabul edip çöpe atmak lazım. Bu yüzden ilk biti her zaman 1 gönderdim ve ve özellikle başlatma işini 161. satırda yaptım. (Raster interrupt için kullanılan satırı set ettiğimiz register aslında 9 bit, 0-319 arası değer alıyor, low byte'daki 0 değeri iki değişik satırda geçebilirken 160 değerinin bir de 8. biti (0'dan başlarsak) 1 olan bir değeri bulunmadığı için)

Malesef arduino tarafında kabak gibi 10ms ve 20ms yansımıyor, ciddi bir interrupt latency oluştuğu için bu değerlerin kontrolünü yaparken 15'ten büyükse 0, küçükse 1 demek zorunda kaldım. Belki benim kodumda da sorun olabilir tabii onu incelemem lazım ancak bu düşük hassasiyet bu yöntemle yapılacak daha yüksek hızlı veri transferi için ciddi bir engel.

Sonrasında menüyü biraz şenlendirmek istedim ve hvsc içinden beğendiğim bir sid'i çalmaya karar verdim. Bu noktada arduino IRQ'ya kulak kesildiği için raster interrupt'larını yahut irq yaratan CIA timer'ı kullanmak resmin dışında kaldı. İmdadıma NMI yetişti, CIA 2 üstünden timer ile NMI üretilebiliyor. Biraz nette dolaşıp sağdan soldan topladığım bilgilerle 50hz'lik bir NMI interrupt'ı üretip müzik konusunu da hallettim.

Sd karttaki dosyaları browse etmek için menünün talep ettiği veri aktarımı yapmak istiyorum. Bu sırada aklıma başka bir şey gelmez ise müziği kesip NMI handler'ı transfer işinde kullanmam gerekecek gibi gözüküyor.

Sd kart browse etme çözümünde arduino menüyü C64'e ilk gönderdiğinde sd kart içerisindeki ilk 24 entry'i de programın sonuna iliştirip gönderecek. Kullanıcı bir sonraki sayfaya geçmek istediğinde, bir dizinin içine girmek istediğinde c64 üstte anlattığım yöntemle bu bilgiyi arduino'ya iletecek ve soft nmi vektörünü kartuş bölgesindeki transfer için kullandığım handler'a işaret ettirecek. Arduino ise EXROM hattını low'a çekip kartuştaki rom'u devreye alacak ve kendisine iletilen bilgilerle veri transferini gerçekleştirecek. Bunlar yapılırken c64 reset edilmeyecek ancak ekran kapanacak. Transfer edilecek data max 1k / 2k seviyelerinde olacağı için işlem 1 saniyenin çok çok altında bitecek.

Bu arada arada Arduino tarafında sd karttan okuma yaparken byte byte okumadan 512'şer byte okumaya çevirdim. 3sn.'de yüklemesi yapılan bir oyun (30k) 2sn'de yüklenmeye başladı.
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.865



Üyelik Bilgileri WWW
« Yanıtla #52 : Ekim 05, 2015, 01:34:25 ÖÖ »

İlk yaptığım arayüzde dosya isimleri menü kodu içine hardcoded koyulmuştu, arduino tarafına bir indeks gönderip oyunu yüklüyordum. Bunu geliştirdim ve sd kart klasör içeriğini menü programına göndermeye başladım. İlk sayfayı dolduracak sd kart içeriğini göndermek basit. Bu hızlıca halloldu. Diğer sayfaları göndermek için kartuş üstündeki transfer rutinimi kullanmayı planlamıştım.

Kolları sıvadım, menüdeki müziğin kesilmesi gerekti zira IRQ'yu arduino ile haberleşmek için kullanırken gezinilen sayfanın içeriğini almak için NMI kullanmam gerekiyor. Transfer kodu zaten mikrosaniye mertebesinde zamanlama hassasiyeti gerektirdiği için transfer yapılırken müzik çalmaya devam etmek pek mümkün değil. Tüm içeriği baştan menüye göndermiş olsan onun da pek pratikliği yok. Neyse efendim müzikten vazgeçtim.

Hali hazırda irq ile 7 bit gönderebiliyorum. Son bit her türlü 1 oluyor. Bir sayfada 20 program listelediğim için bunu ifade etmek için bana 5 bit yetiyor. Kalan 2 biti ise bu 5 bitin anlamını değiştirecek şekilde değiştirmem menüye verilecek önceki sayfa, sonraki sayfa gibi komutları ifade etmek için yeterli.

Gönderdiğim komut 00 bitleri ile başlıyor ise, sonrasında gelen 5 bit seçilen programın / klasörün değeri oluyor. 01 bitleri ile başlıyorsa eğer sonraki 5 bit arduino'ya verilecek komutu ifade ediyor. Şimdilik 1 komutu bir sonraki sayfa, 0 komutu ise önceki sayfa anlamına geliyor.

Sonraki sayfa gösterileceği zaman menü irq ile komutu gönderdikten sonra interrupt'ları kapatıyor ve kartuş üstündeki transfer rutininin kendini devam ettirebileceği bir bekleme rutinine giriyor. Bu rutin aslında kartuş üstündeki ana transfer rutininin bekleme rutini ile aynı. Tabii $0318/$0319'daki vektörü de kartuşa işaret ediyor.

Şöyle bir şey,

Kod:
WAITNMI
BIT BITTARGET
BVC WAITNMI
CLV

Arduino tarafı ise gönderimi normalde olduğu gibi yapıyor. Burada bir fark var, prg transferlerini normalde reset ile başlatıyorum ve önce kartuş üstündeki başlangıç rutini çalışıyor. Bu transferde ise ön planda çalışan kod menü kodu ancak arduino EXROM'u LOW'a çekip $8000-$9FFF bölgesindeki alanı kullanıma açıyor. C64 reset olmuyor, transfer bittiği noktada menü programı devam ediyor.

Düşünce güzel ancak uygulamada başarı sağlayamadım. Uzun saatler süren hata ayıklama sekansları sonrasında ana bug'ı buldum. Arduino'nun bir şekilde başlangıçta ekstra bir NMI ürettiğinii keşfettim. Bu da bütün transfer rutinini altüst ediyordu. Peşinden hem arduino tarafında hem de menü kodunda başka bug'ları da fix edince epey adamakıllı bir seviyeye geldi.

Şimdilik klasör işine girmedim. Klasör desteği kolay. Menü tarafı oldukça dummy. Arduino ona listelemesi gereken şeyleri gönderiyor. Ayrıca listede kaç item var, toplam kaç sayfa var, şu an kaçıncı sayfada gibi bilgileri de iletiyor. Menünün tek yaptığı seçilen item'ı yahut ileri ve geri komutlarını göndermek. Yani seçim yapılan şey bir klasör olursa arduino bunu anlayacak ve o klasöre girip klasörün içeriğini gönderecek.

Son çektiğim video şöyle,


« Son Düzenleme: Ekim 05, 2015, 01:39:38 ÖÖ 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 #53 : Ekim 05, 2015, 07:23:25 ÖÖ »

Gayet guzel, darisi benim menunun basina artik...
Logged

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



Üyelik Bilgileri WWW
« Yanıtla #54 : Ekim 05, 2015, 09:49:54 ÖÖ »

Gayet guzel, darisi benim menunun basina artik...

Senin hardware C64 tarafındaki menü tarafından bakılınca daha basit olduğu için benim gibi badireler yaşamazsın. Tabii benim için de fiziki kartuş çalıştırdığımdan ötürü aleti ele geçirmem kolay oluyor. Şu senin Commando'dan yaşadığın problemi her seferinde açılışta kartuşun init rutinini çalıştırabildiğim için yaşamıyorum.
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ı: 6.919


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #55 : Ekim 05, 2015, 11:05:55 ÖÖ »

Şema hazırsa yavaştan başlayayım ben pcb tasarımına. Kağıt üstünde bir şema bile işimi görür.
Logged

http://www.retrodergi.com - http://www.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PSP Slim, Nintendo DS Lite
i_r_on
Uzman
*****
Mesaj Sayısı: 2.865



Üyelik Bilgileri WWW
« Yanıtla #56 : Ekim 05, 2015, 11:53:22 ÖÖ »

Şema hazırsa yavaştan başlayayım ben pcb tasarımına. Kağıt üstünde bir şema bile işimi görür.

Kağıt üstünde mi En sevdiğim. Blok diyagram olur mu?
Logged

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

twitter | blog
ibo1973
Uzman
*****
Mesaj Sayısı: 2.082


Üyelik Bilgileri WWW
« Yanıtla #57 : Ekim 05, 2015, 11:55:47 ÖÖ »

.
« Son Düzenleme: Ekim 05, 2015, 15:53:24 ÖS Gönderen: ibo1973 » Logged

Eşimin videolarını çektiği youtube yemek tarifleri kanalımız
http://www.youtube.com/channel/UCWeURdgKjzxe9490Pb5KTPA?view_as=subscriber
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 6.919


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #58 : Ekim 05, 2015, 12:56:54 ÖS »

Kağıt üstünde mi En sevdiğim. Blok diyagram olur mu?

Neyin nereye bağlı olduğu belli olsun yeter. Kahkaha

Şemayı çizince link veririm son bir kez kontrol edersin pcb aşamasına geçmeden önce.
Logged

http://www.retrodergi.com - http://www.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PSP Slim, Nintendo DS Lite
i_r_on
Uzman
*****
Mesaj Sayısı: 2.865



Üyelik Bilgileri WWW
« Yanıtla #59 : Ekim 05, 2015, 15:34:41 ÖS »

Akşam eve gidince ilk iş sana bir blok diyagramı çizeyim, hatta gönderdiğin kartuşlardan birisini de çalışır vaziyette hazırlayıp göndereyim sana.
Logged

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

twitter | blog
Sayfa: 1 2 3 [4] 5 6 ... 19   Yukarı git
Yazdır
Gitmek istediğiniz yer: