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 ... 19   Aşağı git
Yazdır
Gönderen Konu: IRQHack64 - EPROM Kullanan :) Prg Yükleyici Kartuş  (Okunma Sayısı 171814 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #15 : Eylül 20, 2015, 23:54:56 ÖS »

Bu proje güzelmiş, neden kaldı ki?
Bence devam edilir.
 
5-6 yıl yada daha fazla önceydi, live gelen bir video sinyali üzerine superimposed text bindirmek gereken bir proje gelmişti elime. Normalde, video'yu dijitale çevir, dijital domain de textvs ekle, tekrar PAL encode et. Ancak ucuz bir çözüm istenmişti, ve gecikme olmaması gerekiyordu.
Aklıma mikroişlemciyi PLL ile gelen PAL sinyaline senkron çalıştırıp, basılacak görüntüyü dot by dot işlemci ile üretmek geldi. Gerçekten de biraz uğraştıktan sonra, PAL sinyaline PLL ile lock olup işlemciyi senkronize çalıştırabildim. Ancak yazılacak yazıyı lookup edip live olarak basmaya çalışınca, çözünürlük çok düşük oldu. Yani 1 pixel datayı basana kadar raster bir ton yol gidiyordu. O zaman aklıma RAM kullanma fikri geldi. İşlemci RAM'i raster yazının olduğu yeri geçince aheste aheste dolduruyordu, sonra logic ve PAL dot frekansında çalışan counter ile RAMdeki veriyi video sinyali üzerine basabilmiştim. Çok da hoş olmuştu.

Bence bu proje de olur.
Logged

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


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #16 : Eylül 21, 2015, 00:17:15 ÖÖ »

Bildiğim kadarıyla kalmadı devam ediyor zaten. Hatta benim KissCart64'lerden biri kobay olarak yolda şu anda. Kahkaha
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 #17 : Eylül 21, 2015, 00:24:29 ÖÖ »

Senin kisscart64 de keske kartus tarafindaki her bacaga bir tp ekleseydin diye gecirdim icimden. Genelde kartuslarda a14 a15 kullanilmiyor ama benim onlara da ihtiyacim vardi. Zaten talibi de cok diye benim projeme donor olarak istemeye cekindim. Devam ediyor ise sevindim bu proje...
Logged

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



Üyelik Bilgileri WWW
« Yanıtla #18 : Eylül 21, 2015, 00:31:22 ÖÖ »

Aslında olmayacak bir tarafı yok da. Devrede çok fazla 74244 var ve hayvani akım çekiyorlar. Expansion port en fazla 450ma veriyor. Bu yüzden bıraktım. Hatta bugün başka bir şey denemek için tamamen söktüm.
Belki counter ve 74244 yerine senin yaptığın gibi 8 bit latch'e yönelseydim daha makul bir sonuç çıkabilirdi ancak onda da sıkıntı arduino micro / pro mini gibi board'larda 24 tane boşta gpio olmaması. shift register'ların yahut diğer pratik entegrelerin de output'larını tristate eden versiyonlarına denk gelmedim.

Ya da 74244'e alternatif daha az güç tüketen bir çözüm kullanmak lazım. Biraz bakındım ama göremedim.

Alternatif olarak poor man's dma v2'yi deneyeceğim

Özay'ın kartuş board'u bu yeni çözüm için dediği gibi kobay olarak kullanılacak.

Ancak fazla bir beklentim yok bu yeni çözümden çünkü transfer hızı max 3-5k per second gibi bir şey olacak.

Yöntem şu,

Arduino EXROM, RESET, IRQ ve NMI hatlarını kontrol ediyor. Başlangıçta sistem standart 8k kartuş modunda. Eeprom'a yazdığım bir bootloader var. Bu bootloader esas işi yapacak rutini kaset buffer'a kopyalayıp buraya dallanıyor.

Ana rutin Kernal'in altındaki RAM'de IRQ ve NMI vektörlerini değiştiriyor raster ve cia interrupt'larını kapatıyor. Ardından Kernal rom'u devre dışı bırakıyor ve sonsuz döngüye giriyor.

Arduino Exrom'u tekrar high'a çekiyor böylece $8000'den başlayan bölgedeki ROM devre dışı kalıyor.

Arduino sonra IRQ ve NMI'ı uygun bir şekilde kullanıp data transferini gerçekleştiriyor. Transfer bittiğinde yüklenen kod çalıştırılıyor.

Sid player projesinde aynı işi IRQ / NMI ve SO pin'lerinin üçünü kullanıp yapmıştım. 6510'da SO pini olmadığı için mecburen farklı rutinler yazmak zorunda kaldım.

Şu an yazdığım rutin aklıma ilk gelen, aklınıza gelen hızlı olacağını düşündüğünüz bir şey varsa yazın.

edit: 250ma yazmışım yanlışlıkla düzelttim
« Son Düzenleme: Eylül 21, 2015, 00:33:44 ÖÖ 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
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



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

Sağolsun Özay'ın hediye ettiği kobay / kobaylar geldikten sonra tekrar el attım poor man's dma v2'ye zira artık iş Noflash'lıktan maalesef çıktı. Geçen ay elime geçen eeprom'ları da kullanma fırsatı oldu bu. Ultraviyole takılmak zorunda kalmıyorum artık. Bendeki eeprom'lar 32k ancak bunlar 64k olanlar ile pin uyumlu. A15 32k'lık entegrelerde programlama voltajına denk geliyor. Çok farkediyor mu bilmiyorum ben low'da tuttum.

Kartuş rom'unda duracak yazılımı hali hazırda yazmıştım. Bir tane fail safe bir tane de biraz daha hızlı ama daha karmaşık olan şeklinde.

Özay'ın switch'li kisscart'ından ekstradan NMI / IRQ / EXROM / RESET / GND hatlarını arduino'ya bağladım. (NMI ve IRQ hatlarına 100nf filtre için kondansatör de bağladım)

1. Başlangıçta arduino c64'ü resetliyor. Exrom low'da yani kartuş devreye girecek.

2. Reset sonrası Kartuş romundaki rutin kernal'in yapacağı initialization işlemlerini yapıyor. Peşinden bir loader rutinini kaset buffer'ına kopyalıyor. Ve peşinden buna dallanıyor.

3. Loader rutini CIA'den ve VIC'den gelecek interrupt'ları kapatıyor. Ekranı kapatıyor zira ekran açık olursa badline'lardan dolayı interrupt'lar çalışırken bile vic araya girip zamanlamayı dağıtabilir. 1 portundaki bellek yönetimi register'ından kernal ve basic rom'larını da kapatıyor. (I/O'yu da kapatabilir aslında, henüz denemedim)

4. Loader rutini IRQ ve NMI vektörlerini benim rutinlerime ait olanlarla değiştiriyor. Bunlar veri transferi için kullanılacak.

5. Bundan sonra loader rutini overflow flag'ini clear edip peşinden overflow flag'i clear ise aynı satırda beklemeye başlıyor. Başka herhangi bir flag de olabilirdi hiç bir önemi yok, maksat düşük cycle harcayacak bir komut üstünde 6510'u bekletmek. Dallanan bir branch komutu 3 cycle yiyor. Yani interrupt geldiğinde 6510 en fazla 3 cycle bekleyecek elindeki işi tamamlamak için.

İşin sonrası arduino ve interrupt handler'lar arasında.

6. Öncelikle arduino exrom hattını high'a çekip $8000-$9FFF aralığını rom olmaktan çıkarıyor.

7. İki tane rutin yazdığımdan bahsetmiştim biri fail safe (yani sıçmayacak) biri de hafif optimize. (Hafif optimize çünkü daha iyisi yapılabilir, ben fazla uğraşmadım şimdilik)

Sid player'da daha önce bahsettiğim gibi 6502 kullanıyorum ve 6502 üstünde SO diye bir pin var, byte bazlı yahut daha büyük bloklar için senkronizasyonu sağlamak için ideal bir pin. Hatta ve hatta tek başına bu pin üstünde modülasyonla bile senkron veri aktarımı mümkün. Ancak 6510 üstünde SO yok ve olsa da benim senkron bir çözüm yapmaya niyetim yok zira senkron demek zamanlamayı tutturmak demek, arduino tarafında da cycle saymak demek vesaire vesaire..

Fail safe ve yavaş metod olarak benim ilk aklıma gönderilecek byte'ın değeri kadar NMI yapmak NMI içinde X register'ını arttırmak. IRQ ile de her bir byte gönderimini sonlandırmak geldi. Bunu uyguladım, hakikaten çalıştı da. Aşağıdaki videoda bu yöntem kullanıldı.

Bir diğer yöntem olarak aklıma yine buna benzer ancak biraz daha optimize bir çözüm geldi. Bunda bir byte'ı 3'e bölüyorum, her bir parçanın sayı değeri kadar NMI yapıp peşine parçayı tamamlamak için IRQ yapıyorum. Yükleme hangi adrese yapılacak, kaç blok yüklenecek gibi bilgileri ilk yönteme göre gönderiyorum. Asıl datayı ise bu ikinci yönteme göre gönderiyorum. Tek bir IRQ handler yok bu arada. Bir durum makinesi (state machine) gibi çalışan birden fazla IRQ handler mevcut.

4 tane irq handler var,
i. SlowIrq : İlk yönteme göre transfer yapıyor, işi bitince artık sıra FastIrq1'de diyor. Irq vektörünü değiştiriyor yani.

ii. FastIrq1 : Gönderilen byte'ın en anlamlı 3 bit'ini alıyor. İşi bitince FastIrq2'yi irq handler olarak tayin ediyor.

iii. FastIrq2 : Gönderilen byte'ın sıradaki 3 bit'ini alıyor. Bir byte'a
D7 D6 D5 D4 D3 D2 D1 D0 bitlerinden oluşuyor dersek bu handler D4 D3 D2'den oluşan kısmını alıyor.

iv. FastIrq3 : En ağır işle uğraşan da bu. Kalan son iki bit'i (D1 ve D0) alıyor. Tüm byte alındığı için bu byte'ı saklaması gereken yere saklayıp transferin bitip bitmediğini kontrol ediyor. Transfer bitmemişse irq handler olarak FastIrq1'i set ediyor. Bitmişse ana rutin içinde overflow flag clear ise dallan diyen komutu overflow flag set ise dallan komutuna çeviriyor.

Geldik işin son kısmına,

8. Bellek standart moduna alınıyor ($01 portuna $37 yazılarak), CIA ve VIC eski haline getiriliyor. Yüklenen programın basic programı mı yoksa makine dilinde yazılmış bir program olup olmadığı kontrol edilip buna göre çalıştırılıyor.


Fail safe olanın videosu burada, ikincisi çok uğraştırırsa, dönüp de bulamazsam diye bunun videosunu çektim



Tabii sonrasında hızlı (kime göre, neye göre ) olan versiyonu da çalıştırdım. Şu an için saniyede 2k gibi bir transfer performansı var. Videodakinde 42 saniye süren yaklaşık 10k'lık bir yükleme hızlı olan versiyonda 5 saniyeye iniyor. 2 saniye de reset yapılırken harcanıyor.

Hardware basit, ekte verdiğim dosya içinde tüm bilgiler mevcut. Özay'dan gelecek switch'li kartuşa elinizde herhangi bir arduino türevi board varsa uygulamanız mümkün. Sd modülü bağlayıp çakalca sd kart içeriğinden seçilen dosya bilgisini arduino'ya geri gönderebilirsem kullanılabilir bir ürüne dönüşebilir. Hız açısından tercih eder misiniz merak ediyorum. (Bu hakikaten bir sorudur)

Çakalca dediğim anda aklıma bir fikir geldi bu arada
Arduino IRQ ve NMI üretebildiği gibi, bunlara bağlı io pin'lerini okuma moduna alıp dinleyebilir. 6510 tarafında çalışan kodun yapması gereken belirli bir pattern'de NMI ve / veya IRQ üretmek.

Herkese iyi bayramlar,

ps: Ekteki c64 assembly dosyalarını derleyebilmek için 64tass turbo assembler'a ihtiyacınız var. Ben geliştirmemi ve debug'ımı 6502 macroassembler & simulator programında yapıyorum. Son derleme işinde de 64tass'ı kullanıyorum.

* IrqHack64.zip (23.22 KB - Yükleme: 290 kez.)
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 #20 : Eylül 23, 2015, 23:53:46 ÖS »

Tebrikler, ilerlemişsin.
Yavaş yöntemde, doğru mu anladım? 255 değeri göndermek için 255 adet NMI yapıp sonra byte bitti demek için bir IRQ mu yapıyorsun?
Bunun yerine zaten NMI ve IRQ lar üzerinden senkronize olduğunu varsayarsak, byte bitti hiç demesen örneğin 0 göndermek için NMI, 1 için IRQ yapsan. Toplam 8 olunca zaten byte bitti demektir.
Ortalama byte değerini 127 kabul etsek bu yöntem yaklaşık 16 kat hızlandırabilir...

Bu arada ben de birşeyler yaptım. Buraya yazarken bilgisayar kilitlendi. Enerjim kalırsa hızlıca tekrar yazacağım birazdan.

İyi bayramlar.
Logged

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



Üyelik Bilgileri WWW
« Yanıtla #21 : Eylül 24, 2015, 00:39:21 ÖÖ »

Yavaş yöntemi aslında sadece hardware düzgün çalışacak mı testi için uyguladım. Kodlaması da kolay oldu.

Aynen 255 göndermek için 255 defa nmi yapıyor peşine de irq yapıyor. Yavaş yöntemin hızlı çalışması için zaten bir tasarrufta bulunmadım

Düşünüyorum NMI'da 1, IRQ'da 0 göndersem byte'ı saklayacak kodu, bitti mi bitmedi mi kontrolünü falan handler'ların içine gömmem lazım. Bunları da her bit için çağıracağımdan aşağı yukarı aynı hesaba çıkabilir. (Optimize versiyonla kıyaslıyorum)

Sid player'da SO pin'im olduğu için IRQ ve NMI handler'larımın ikisi de 17 cycle (IRQ'daki CLC gereksiz bu arada, 0 bitleri için biraz daha hızlanabilir)

Kod:
;Prepare data transfer
LDX DATA_LENGTH
LDY #$00

NEXTINBLOCK
CLV ; 2 cycles
WAITDATATRANSFER
BVC WAITDATATRANSFER ; 3 cycles during transfer, 2 cycles after SO flag raised.
STA (ACTUAL_LOW),Y ; 6 cycles
INY ; 2 cycles
BNE NEXTINBLOCK ; 3 cycles
INC ACTUAL_HIGH ; 5 cycles
DEX ; 2 cycles
BNE NEXTINBLOCK ; 3 cycles

; For byte transfer sync, 3 + 6 + 2 + 3 + 2 cycles needed = 16 cycles
; For page transfer sync, 3 + 6 + 2 + 3 + 5 + 2 + 3 + 2 cycles needed = 26 cycles

LDA COMMAND
BNE ANOTHERTRANSFER ;IF COMMAND is not zero than try to do another transfer
JMP (DATA_LOW) ;IF it's zero than just execute the last transferred stuff

NMIROUTINE
SEC
ROL
RTI

IRQROUTINE
CLC
ASL
RTI

*=$FFFA

.WORD NMIROUTINE
.WORD RESETROUTINE
.WORD IRQROUTINE

Aslında burada bottleneck 65xx serisinde çok çok iyi olsa da sırf interrupt handler için harcanan süre. 7 cycle interrupt'a giriş, 6 cycle interrupt'tan çıkış. Benim şu an optimize olan NMI handler içinde sadece 2 cycle'lık INX komutu var, ancak 13 cycle overhead yüzünden 15 cycle oluyor. Aslında çağırmışken bir şeyler yapsın bari demek çok da mantıksız değil, hala optimize edilebilir.

Bu arada belki de hardware olarak optimize etmek de mümkün. Handler'ları rom'da tutup arduino tarafından besleyeceğim bir yüksek adres biti ile nmi handler'ın iki değişik versiyonuna switch etmem mümkün. Böylece IRQ içinde sadece byte saklama işi yapılabilir. Yazma işi $8000-$9FFF bölgesindeki rom'un altına yapılacağı için sıkıntı çıkmaz muhtemelen. Bu şekilde yaparsam benim sid player'daki transfer performansına ulaşırım.

Hatta 32k rom kullanabilmenin avantajı ile 2'den fazla NMI ve veya IRQ versiyonu yapıp byte bitimi için ayrı, blok bitimi için ayrı handler yapıp epey bir hızlandırılabilir.

Bu şekilde byte transfer overhead'ini, blok transfer overhead'ini ve hatta bitiş kontrolünden kaynaklanan overhead'i sadece olayın gerçekleştiği ana indirgemiş oluruz. Hepsini ihmal edersek aşağı yukarı 20 cycle'da bir bit transfer etsek saniyede yaklaşık 1.000.000/(20 * Karizmatik = 6.250 byte transfer ederiz. Overhead'i ile 5k olsa çok çok da kötü değil.
« Son Düzenleme: Eylül 24, 2015, 00:46:44 ÖÖ 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
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #22 : Eylül 24, 2015, 00:55:44 ÖÖ »

Bu arada düşününce her nmi'da bir bit transfer etmeyi iyileştirecek şöyle bir yöntem de geldi aklıma. Kod totalde 256 byte olsa 32k içine bunlardan 128 tane sığar. Sadece 8 biti adres bus'tan sağlarsak (A0..A7) geri kalan adres hatlarını Arduino'ya kontrol ettirdiğimizde her nmi veya irq'da 128 çeşit kod çalıştırma imkanı var. Flash 64k olursa 256 çeşit oluyor. Yani tek bir interrupt ile 1 byte transferi de yapılabilir. Bu durumda hız saniyede 30k seviyelerine çıkıyor. Arduino üstünde de buna yetecek gani gani i/o pin var. Hali hazırda 4 tanesi kullanımdaydı. 8 tane daha kullanılacak ek olarak.

ps1: Şu anki kod 256 byte'tan kısa, bu haldeki kod daha basit olacağı için daha kısa olur. İki parçalı olmasına da gerek olmayacak hem. Kod 128 yahut 64 byte'a indirilip çok daha hızlandırmak da mümkün.

ps2: Kartuş üzerinde 8 adres bacağına hallenmek gerçekten de Özay'ın kartuşu kobay haline getirecek bu arada
« Son Düzenleme: Eylül 24, 2015, 01:04:58 ÖÖ 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 #23 : Eylül 24, 2015, 01:29:59 ÖÖ »

Adres Bus'ı o şekilde kafana göre kullanman mümkün mü?
Ekran kapalı bile olsa, Phi2 low iken adres bus'ını VIC ele alıyor.
Bu durumda gene bir donanım desteği ile Phi2 kontrolü yapman gerekmeyecek mi?
Logged

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



Üyelik Bilgileri WWW
« Yanıtla #24 : Eylül 24, 2015, 01:50:19 ÖÖ »

Adres Bus'ı o şekilde kafana göre kullanman mümkün mü?
Ekran kapalı bile olsa, Phi2 low iken adres bus'ını VIC ele alıyor.
Bu durumda gene bir donanım desteği ile Phi2 kontrolü yapman gerekmeyecek mi?

Eprom'un A0..A7'si address bus'a bağlı olacak. A8..A15'i arduino üstünden ben süreceğim. Phi2 ve VIC ile işim yok çünkü eprom ROML sinyali ile select oluyor. PLA hali hazırda üretiyor bu sinyali.

Benim dikkat etmem gereken kodun 256 değişik versiyonunda değişen kısımların haricindeki yerlerin tamamen aynı adreslerde aynı kodlardan ibaret olması. Bunun dışında arduino'nun A8..A15'e besleyeceği değere göre çalışan kod değişecek. Belki de tek byte değişecek o da gönderilen byte

Byte bazında çalışıldığı için IRQ'yu da düşenleri toplama şeklinde kullanmak da mümkün. NMI 16 byte stack'e basar. Üstüne bir IRQ yapınca 16 byte'ı gider store eder aşağıdaki şekilde. Veya IRQ daha akıllıca kullanılıp hızı arttırmak için kullanılabilir.

Kod:
NMIROUTINE
LDA #$VAR ; VAR seçilen eprom bloğuna göre değişken
PHA
RTI

IRQ
PLA
STA ....
PLA
STA ....
PLA
STA ....
...
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 #25 : Eylül 24, 2015, 01:56:19 ÖÖ »

Soyledigin yontemi cok iyi anladim fakat adres hattini arduinonun surmesi isine kafam yapmiyor. Adres ve data hatlari global. Yani pla tarafindan sana ayri gelmiyor. Ya 6510 drive ediyor yada vic drive ediyor. Eger kartus portundan drive edeceksen vic in drive etmedigi BA high iken drive etmelisin. Ama bu durumda da 6510 u ezmemek icin 6510 AEC hatti ile high z duruma alinmasi lazim bence.

Bilmiyorum bugun kafam fazla karisti bu islerle belki de ben tam anlayamadim.
Logged

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



Üyelik Bilgileri WWW
« Yanıtla #26 : Eylül 24, 2015, 02:00:52 ÖÖ »

Soyledigin yontemi cok iyi anladim fakat adres hattini arduinonun surmesi isine kafam yapmiyor. Adres ve data hatlari global. Yani pla tarafindan sana ayri gelmiyor. Ya 6510 drive ediyor yada vic drive ediyor. Eger kartus portundan drive edeceksen vic in drive etmedigi BA high iken drive etmelisin. Ama bu durumda da 6510 u ezmemek icin 6510 AEC hatti ile high z duruma alinmasi lazim bence.

Bilmiyorum bugun kafam fazla karisti bu islerle belki de ben tam anlayamadim.

Şöyle diyeyim. Adres bus'ı sürmeyecek aslında, doğrudan eprom'un adres bacaklarını sürecek. Eprom'un A8..A15 hatları address bus'a bağlı olmayacak. Bu noktada özel bir zamanlama ihtiyacı yok aslında. Transferi yapmadan önce transfer edeceği byte'ı eprom'un adres bacaklarına set edecek. Yani eprom devrede 256 byte'lıkmış gibi olacak. En üst adres bacakları arduino üstünden seçilebilecek.

Özay'ın kartuş projesindeki 3 bit'lik 8 seçimli switch gibi düşün. Tabii arduino bunu 20-40 mikrosaniyeler mertebesinde değiştirecek.
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 #27 : Eylül 24, 2015, 02:15:18 ÖÖ »

Ok simdi oldu. Eeprom un adres bacagi set edilerek farkli adreslerdeki kodlarin calismasini saglayacaksin.
Logged

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


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #28 : Eylül 24, 2015, 09:52:13 ÖÖ »

Süper gidiyor, aynen devam.

En sonunda projeleri birleştireceksiniz galiba. Sanki aynı yoğurdu iki farklı teknikle yiyorsunuz gibi geldi. Kahkaha
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
i_r_on
Uzman
*****
Mesaj Sayısı: 2.873



Üyelik Bilgileri WWW
« Yanıtla #29 : Eylül 26, 2015, 02:28:42 ÖÖ »

Süper gidiyor, aynen devam.

En sonunda projeleri birleştireceksiniz galiba. Sanki aynı yoğurdu iki farklı teknikle yiyorsunuz gibi geldi. Kahkaha


Bence benimkisi yoğurt, delimawi'ninkisi ise süt Hani yoğurt yoğurttur daha ötesi yoktur. Sütten değişik şeyler yapabilirsin. Tekli prg yükleme anlamında aşağı yukarı eşdeğerler buna yoğurt dersek.

Bu arada donanım bitti Özay, pcb tasarımını bekliyorum Senin KissCart dip versiyonu aparıp şemayı çıkarırım yakında.


Gelelim gelişmelere, bayramda bir gün evde geçirme fırsatını yakaladım ve oturdum menü yazılımını yazmaya başladım. Bunu %90 bitirip döndüm arduino'ya veri gönderme işine. Epey bir cebelleştikten sonra bunu da bir yere getirdim. Akabinde sd kart'tan dosya okuma kısmına geçip hızlıca bunu da hallettim. Daha önce uğraştığım için burası çok uğraştırmadı. Tabii daha yapılacak epey bir iş var yazılım anlamında ancak donanım anlamında sona geldi.

Daha önceki videoyu izleyeniniz olduysa cursor'ün yaldır yaldır yandığını farketmişsinizdir. Ben de farketmiştim ancak sorunun ne olduğunu anlamayı ve çözmeyi ertelemiştim. Bugün yazılım işi bitip de deneme kısmına geldiğimde oyunların açıldığını fakat oyun içinde interrupt'lar ile sürüldüğü belli noktalarda bozulmalar farkettim. Bu ana kadar farketmememin sebebi muhtemelen NMI'ın etkileniyor olmasından kaynaklanıyor. Çünkü IRQ kullanıp arduino'ya veri transferi yaptım, sıkıntı olsaydı orada da çıkacaktı.

Neyse efendim gürültü engellesin diye IRQ ve NMI pin'lerine koyduğum kapasitörleri bir kaldırayım dedim. Kaldırdığım gibi sorun da ortadan kayboldu.

Bu arda yaldır yaldır yanan cursor ne hikmetse normalin tam 2 misli hızda yanıp sönüyordu. Sebebini bilen varsa beri gelsin

Son hali şu şekilde



Sırada veri transferini 15-20 kat hızlandırmak ve menü + arduino tarafında file system kodunu finalize etmek var.

ps: Projenin de ismini değiştirdim bu arada, belki yine değişir ancak şu an IrqHack64 oldu. Eprom kullanıldığı için Noflash demek çok doğru olmayacak.
« Son Düzenleme: Eylül 26, 2015, 02:30: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
Sayfa: 1 [2] 3 4 ... 19   Yukarı git
Yazdır
Gitmek istediğiniz yer: