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.trArcade Sistemler ve Oyun KonsollarıArcade Sistemler (Moderatör: yavuzg)NEO-GEO MVS Mini Bartop Kabin Projesi
Sayfa: [1] 2 3 ... 19   Aşağı git
Yazdır
Gönderen Konu: NEO-GEO MVS Mini Bartop Kabin Projesi  (Okunma Sayısı 82288 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
eins
Uzman
*****
Mesaj Sayısı: 1.799


A.K.A. deliMawi


Üyelik Bilgileri
« : Haziran 22, 2016, 14:53:12 ÖS »

Geçmişte (80'lerde), özellikle aksiyon oyunlarında oldukça başarısız olsam bile, ben de saatlerce "atari" salonlarında vakit ve jeton harcamıştım. 
Bundan birkaç ay önce, forumda bir postum olmuştu. PC tabanlı olmayan, yani gerçek hardware üzerinde çalışacak ve o dönemin ambiyansını yansıtacak en uygun konsol ne diye sormuştum.

http://www.commodore.gen.tr/forum/index.php?topic=12163.0

Bu topic altındaki yorumlardan sonra, aslında ihtiyacım olan sistemin bir Neo Geo olduğuna kanaat getirdim. Tabiki hiç tanımadığım, bilmediğim bir sistemdi. Biraz araştırma yaptıktan sonra aslında MVS sisteminin gerçekten de o dönemlerde kabinlerde kullanılan gerçek hardware olduğunu öğrendim.

Sonrasında, sevgili Simon, LW3D ve kirkoryan(Özgür Dereli) bana MVS slot hediye etmek istediklerini bildirdiler. Gerçekten şaşırmıştım. Simon hızlı davrandı ve ertesi gün bir Neo Geo MVS Slot ve iki adet orjinal oyun ofiste beni bekliyordu.
Hepinize ayrı ayrı tekrar teşekkür ederim.

Artık tek bir sorun kalmıştı. Benim amacım özellikle bir veya iki oyun değil, canım sıkıldıkça değiştirerek farklı farklı oyunların yaratacağı nostaljiyi yaşamaktı ancak kartuşlar pahalı idi. Seçme 30-40 kartuş bile bulundurmak bu proje kapsamı dışında kalıyordu, zira bu konuda bir kolleksiyon yapmak niyetinde değildim.

Hemen birkaç google aramasından sonra birkaç farklı çeşit çoklu oyun kartuşlarının olduğunu farkettim. 120, 138, 150 ve 161 in 1 kartuşlar temin edilebiliyordu. İlk başta hemen bir adet 161 in 1 sipariş etmek geldi içimden. Ancak biraz daha araştırma yapmaya karar verdim.

Öncelikle 161 in 1 içerisinde tüm oyunlar yoktu, yani örneğin 120 in 1 deki bazı oyunlar 161 in 1 de yoktu vb. Bu arada kartuşları incelerken enteresan bir detayı daha farkettim.
138 in 1 kartuşu pek tercih edilmiyordu. Çünkü bu kartuş tek başına çalışmıyordu. Normalde MVS konsolun JAMMA çıkışına ek bir kart takılıyordu, ve bu karttan çıkan bir kablo ana kartuşa gidiyordu. Bu allengirli durum pek tercih edilmemesinin sebebiydi.



Tabiki böyle bir enteresan çözüm ilgimi çekmişti, yapıyı biraz daha detaylı araştırdım ve sonunda çok hoşuma gitti. Şöyle ki normalde çoklu oyun kartuşlarında, oyun seçimi için bir menü bulunur. Konsol açılınca önce bu menü çalışır. Bir oyun seçilince de ilgili oyun çalışır. Ama bu sistemin çalışması için oyun romları uygun şekilde patchleniyor vb. 138 in 1 kartuşunda ise bambaşka bir çözüm uygulamışlar. Oyun romları bire bir kopyalanmış ve flashlara kaydedilmiş. Dolayısı ile aslında Neo Geo üzerinde çalışacak bir menü kodu vb de yok. İşte biraz önce bahsettiğimiz JAMMA çıkışına takılan kart aslında Neo Geo dan tamamen bağımsız olarak oyun menüsünü ekrana çizen kart. Bunu yapmak için de kendi RGB çıkışını üretiyor ve Neo Geo JAMMA üzerinden gelen RGB görüntüsünü keserek kendi oluşturduğu menüyü ekrana gönderiyor. Bir oyun seçilince de, biraz önce bahsettiğim kablo ile ana kartuşa hangi rom'un seçildiği bilgisini 8 bit binary olarak gönderiyor. Bu sayede ana kartuş sadece seçilen romu adresleyerek sanki o kartuşun orjinali takılmış gibi çalışmasını sağlıyor.

Bu sistemin avantajı ne? JAMMA çıkışındaki kartı çıkartıp atabiliriz. Ben menü falan istemiyorum. Her açıldığında mümkün ise en son seçtiğim oyun doğrudan başlasın istiyorum. İşte bu sistem buna olanak tanıyor. Kartuşa giden kabloya basitçe 8 adet dip switch bağlayarak istenilen oyunun seçilmesi mümkün olduğu gibi buraya ufak bir PIC konularak çok basit ve gizli bir interface ile oyun seçimi yapmak ta tahminimce çok kolay olacak.

Ayrıca diğer kartuşlarda kullanılan romlar patchlenirken bazı oyunlarda bozulmalar olduğunu okudum. 138 in 1 kartuşta patchlenme olmadığı için tüm romların orjinal kopyaları olduğundan da eminiz. (Bir kaç kişi rom checksumlarını kontrol ederek bu durumu doğrulamışlar, ben kontrol etmedim.)

Son olarak 138 in 1 daha ucuz.

Kartuşu paypal patlamadan birkaç gün önce sipariş etmiştim ve bir kaç gün önce de elime ulaştı. Hemen kabataslak bir JAMMA harness hazırlayarak, 1084 monitöre slotu ve 138 in 1 kartuşunu bağladım. Hiç problemsiz çalıştı. Hemen aklımdaki ikinci deneme olan, JAMMA çıkışındaki kartı söktüm ve o şekilde denedim. Beklediğim gibi menu falan gelmeden doğrudan ilk oyun çalıştı. Artık bu projeyi başlatma zamanı gelmişti...
Logged

eins
Uzman
*****
Mesaj Sayısı: 1.799


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #1 : Haziran 22, 2016, 14:53:32 ÖS »

Kabin meselesine gelince, ne ofiste ne de evde tam boy bir kabin bulundurma lüksüm malesef yok. Zaten bu tarz replike bir kabini yapacak sabır ve şevk de malesef mevcut değil. Ama tabiki bu Neo Geo da basit bir karton kutudan fazlasını hak ediyor. Aklımda oluşan fikir, bar top tabir edilen masa üstü ve bire bir replike olmayan, hatta özellikle bir miktar küçültülmüş bir kabin yapmak.

Tam boy bir kabin yapacak olsaydım CRT kullanmak isterdim belki. Ama bu proje için CRT kullanmak istemiyorum. Öncelikle CRT'yi sevmiyorum. CRT bana çok kaba, sağlıksız ve şasesi kabloları vb çok anlamsız allengirli geliyor. Elektronikçi olmama rağmen 20-30KV geçen kabloların varlığını bilmek ürkütüyor. Flyback trafosundan gelen o tiz ses, ekrandaki 50/60hz titreşim hoşuma gitmeyen yönlerden bazıları. Şahsen bir şekilde güncel teknolojileri takip etmek gerekiyor diye düşünüyorum. İtiraz edenler olacaktır, ama bu projede Yavuz Abi'nin yaptığı tarzda tam replike bir kabin yapma niyetinde olmadığımın tekrar altını çiziyorum.

Bu arada CRT'den vazgeçmiş olmama rağmen, CRT'nin ve aslında o kabinlerin bence olmazsa olmazı, scanline'lardan vazgeçme gibi bir niyetim kesinlikle yok. O oyunların kendine has ambiyansını veren en önemli detay bence scanline'lar.

Güncel teknolojileri takip etme kararı vermişken bir başka önemli sorun daha ortaya çıkıyor. Günümüzde malesef 4:3 oranda LCD ekran bulmak öyle çok kolay bir mesele değil. Bu kabin için de 16:9 kullanmak gibi bir niyetim de yok. Zaten kabini küçültmek, CRT kullanmamak gibi kararlarla orjinalden sapıyoruz, bir de aspect ratioyu değiştirerek iyice uzaklaşmak istemiyorum çıkış noktasından.

Zamanında bir uçak simülatörü projesi için, aldığım 3 adet 19inch LCD ekranım olduğunu hatırlıyorum. Bunlardan birini bu iş için kullanmayı düşünüyorum. Aslında bu karar ile kabin ölçülerini de kabaca belirlemiş oluyorum. Çıplak monitör ölçüleri 41x33cm. Çerçeve ölçüsü her yönde yaklaşık 1cm.

Kabin konusuna daha sonra, projenin elektronik kısımı bitince tekrar geleceğim. Şimdilik sadece kabaca ölçüleri belirlemek amacı ile çizdiğim profili paylaşarak elektronik kısıma geri dönüyorum.

Yaklaşık derinlik 50cm, yükseklik 70cm ...


Elektroniğe geri dönecek olursak, daha önce HDMI günlükleri yazımı takip etmiş olanların hatırlayacağı gibi, analog CVBS sinyali decode ederek FPGA ile bir scandoubler gerçekleştirip, HDMI görüntü üretmiştik. Hatta buna ses bindirmiştik. Bu sefer işimiz kısmen daha kolay olacak. Öncelikle ses ihtiyacımız yok. Gene bir scan doubler yapmamız gerekiyor. Ancak bu sefer görüntü decode etme derdimiz de yok. Zira MVS'den RGB sinyal doğrudan geliyor. Önceki projede decode edilen görüntüyü YCbCr den RGB'ye çevirme işleriyle falan da uğraşmıştık. Bu projede bunlara da gerek kalmayacak.

Ancak bu sefer MVS'den gelen RGB sinyalini FPGA içerisine alabilmek için hızlı bir ADC ile dijitize etmemiz gerekiyor. Bu chipler hem pahalı hem de elimde hazırda yok. Ben bu noktada MVS tarafında bu Analog RGB sinyalin nasıl oluşturulduğunu inceledim. Aslında MVS'deki yapı çok basit ve hatta beklediğimden daha kalitesiz çıktı. RGB çıkış için DAC entegresi kullanmak yerine basit direnç bölücülerle oluşturulmuş bir DAC katı olduğunu farkettim. İki adet 74LS273 entegresi kullanılmış. Bu latch entegrelerinin çıkışlarına değişik değerde dirençler bağlanarak birleştirilmiş ve ayrı ayrı R,G ve B sinyalleri oluşturulmuş. Her bir sinyal 5 bit. Bir de her üç renk için de ortak olan bir bit daha var. Yani görüntü çıkışı toplamda 5x3+1=16bit. (Bir de shadow çıkışı var ancak ona daha sonra değineceğim. Şimdilik gözardı ediyorum.)

Her bir rengin bitleri, 3.9K, 2.2K, 1K, 470 ve 220 dirençler ile birleştirilmiş. Buradan da her bir bitin binary bir ağırlığı olduğunu görüyoruz. En büyük dirence bağlı olan bit en düşük değerlikli bit. (Çıkışa en az etkisi olan bit.)

Durum böyle olunca bu iki latch'in çıkışlarını doğrudan FPGA'e alabileceğimizi görüyoruz. Bu sayede aslında DAC->ADC çevrimi de yapılmadığı için kalite kaybı da minumum düzeyde olacaktır. Tabiki son bir sounumuz daha var. MVS 5V ile çalışıyor. Bunu doğrudan 3.3V ilen çalışan FPGA'e girme şansımız yok. Her bir biti ayrı ayrı direnç gerilim bölücüden geçirerek FPGA'e almamız gerekiyor.

Evet, pahalı bir RGB ADC siparişi vermeden önce bu çözümü denemye karar veriyorum ve havyamın başına geçiyorum. Öncelikle MVS'ye zarar vermeden çalışabilmek için bu renk bitlerini gerilim bölücüden gerçirerek FPGA geliştirme kartına bağlayabileceğimiz bir RGB breakout PCB hazırlamamız gerekiyor. Sonrasında bu sinyali FPGA ile alıp işlemeyi deneyeceğiz.

Çıkış olarak bu sefer HDMI kullanma niyetim yok, zaten monitorde de HDMI girişi yok. Bu sefer VGA veya DVI çıkış üretmeyi deneyeceğiz.





Şimdilik bu kadar. FPGA kısmını kurup RGB sinyali almayı denedikten sonra gelişmeleri tekrar paylaşacağım...
Logged

Simon (Özay Turay)
Genel Yönetici
*****
Mesaj Sayısı: 6.279


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #2 : Haziran 22, 2016, 15:47:29 ÖS »

Obaaaa, beklediğim yazı dizisi başlamış. Devamını sabırsızlıkla bekliyorum.
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
LW3D
Genel Yönetici
*****
Mesaj Sayısı: 10.278


Günü Kurtaran Avam Hiooargggh :)


Üyelik Bilgileri WWW
« Yanıtla #3 : Haziran 22, 2016, 16:23:20 ÖS »

Bende heycanla bekliyorum... Normalini geçtim, bartopuna bile yerim yok ama çok doyurucu bilgiler olacağına eminim.. MVS'yi standart LCD'ye bağlamak ve scanline elde etme konusu bile ilginç olacaktır... Takipteyiz
Logged

evreno
Deneyimli
*****
Mesaj Sayısı: 1.074



Üyelik Bilgileri
« Yanıtla #4 : Haziran 22, 2016, 17:04:39 ÖS »

ooo iyi bir proje geliyor anlaşılan
kolaylıklar diliyorum bu süreçte
takip...
Logged
Özgür Dereli
Uzman
*****
Mesaj Sayısı: 1.124



Üyelik Bilgileri
« Yanıtla #5 : Haziran 22, 2016, 18:41:34 ÖS »

Harika bir proje olacak


* depositphotos_2707252-Super-sign.jpg (19.1 KB, 309x449 - Görüntüleme: 1021 kez.)
Logged
yavuzg
Genel Yönetici
*****
Mesaj Sayısı: 5.143



Üyelik Bilgileri
« Yanıtla #6 : Haziran 22, 2016, 19:39:18 ÖS »

ROM'lar patchlenmiyorsa bu platformda BÜTÜN mvs oyunlarını oynatabilmek teorik olarak mümkün mü sence? Yani ROM listesine ekleme/çıkarma yapmak mümkün mü?
Logged

eins
Uzman
*****
Mesaj Sayısı: 1.799


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #7 : Haziran 22, 2016, 23:44:02 ÖS »

ROM'lar patchlenmiyorsa bu platformda BÜTÜN mvs oyunlarını oynatabilmek teorik olarak mümkün mü sence? Yani ROM listesine ekleme/çıkarma yapmak mümkün mü?

Abi sanki teorik olarak mümkün. Ben açıkçası 138 neyime yetmiyo düşüncesi ile bu yönde herhangi bir arayışa girmedim. Ama bu Neo Geo ile ilk tanıştığım bir kaç ay öncesinde, bu sistem için de megaOne benzeri bir kartuş yapılabilir mi diye kabaca bir bakınmıştım, hatta forumda tepki bile almıştım.

Bu sistemde zaten bildiğiniz üzere, kartuşlar içerisinde değişik data tipleri için farklı ROM'lar ve bunlara ait farklı buslar var. Örneğin C Romlarında sprite datası, M1 Romlarında Z80 program kodu vb... Dolayısı ile bu sistemin kartuşlarındaki pin sayısı da bu sebeple çok fazla. Sistem bunlara eş zamanlı olarak erişebildiği için, tek bir flash içerisinde oyuna ait tüm binary bilgiyi depolayıp kartuşu emule etmek C64 te olduğu kadar kolay değil. Her bir rom tipi ayrı bir flash içerisinde olursa işler daha kolay. Sanıyorum ki 138 in 1 de de bu şekilde bir yöntem izlenmiştir.

Ben kabaca içini açıp bir baktım. Hatırladığım kadarıyla 26 adet flash chip ve iki adet CPLD vardı. Flash chipler muhtemelen başka yerlerden sökülüp takılmış fujitsu marka, adını sanını daha önce duymadığım ve PDF ini de bulamadığım birşeydi.

161 in 1 için aşağıdaki adreste şöyle bir bilgi buldum.
(https://wiki.neogeodev.org/index.php?title=Multicart)

3 for P (384MB)
5 for V (640MB)
16 for C (2GB)
1 for S
1 for M

Benim elimde 161 in 1 yok ama sanki aynı sayıda ve aynı model flash chipleri kullanılmış gibi duruyor.

Bu bilgi aslında biraz yukarıda yaptığım varsayımı doğrular nitelikte. Yani 161 oyuna ait tüm M Rom'u tek bir chipe yazılmış vb. Seçilmiş olan oyuna göre gene muhtemelen yüksek değerli adres pinlerini CPLD tamamlıyor ve MVS nin adreslediği bölge flash içerisinde olması gereken yere kaydırılıp erişim sağlanıyor.

Bunu test etmek için şunu yapmamız gerekiyor. Bu flashları söküp okumayı denemeliyiz ve dump ettiğimiz imajlar ile elimizdeki oyunların romlarını kıyaslayarak bir flash haritası çıkartmamız lazım. Eğer tüm rom tipleri için eşleşmeleri bulabilirsek, bunda bir sistematik var mı bakılabilir. Örneğin her oyun için eşit yer mi ayrılmış, yoksa oyun numarasına göre CPLD uniform olmayan bir adresleme mi yapıyor? Eğer uniform bir adresleme de varsa işler çok kolay.

Yeni oyun eklemek mümkün olmasa bile (mutemelen toplam flash alanını tamamen kullanmışlardır, emin değilim), varolan oyunlar teorik olarak rahatlıkla değiştirilebilir.

Benim proje tünelin sonunda ışığı görürse bir tane daha incelemelik 138 in 1 sipariş edip flashları söküp okumayı denerim. Bu noktada sadece bu flashlara ait PDF leri bulmamız gerekiyor. Ben sabah baktığımda bulamamıştım. Ama çok da detaylı araştırmadım açıkçası.
Logged

cdemir
Uzman
*****
Mesaj Sayısı: 2.921



Üyelik Bilgileri
« Yanıtla #8 : Haziran 23, 2016, 00:49:09 ÖÖ »

Kaptanın seyir defteri, Yıldız tarihi 41792.8

Az önceki Commodore gezegeni devriyemizde, burada yaşayan,
zeki(çok zeki) yaşam formları tarafından başlatılan,
yeni bir proje başlangıcına rastladık.
Görünüşe göre, bu yaşam formlarından işimize yarayacak epey bilgi elde edebiliriz.

Proje takip ekibini; ben, Mister Spak ve Doktor Makkoy olarak atadık.

Varlığımızı göstermeden, gelişmeleri merakla takip edeceğiz. Kahkaha




Logged

yavuzg
Genel Yönetici
*****
Mesaj Sayısı: 5.143



Üyelik Bilgileri
« Yanıtla #9 : Haziran 23, 2016, 01:09:25 ÖÖ »

@delimawi, bilgileri için çok teşekkürler. ROM'ları değiştirme kısmına projenin ana hedeflerini tamamladıktan sonra sonra bakarsın. İşin açıkçası NeoGeo'ya özel bir upscaler kısmı beni daha çok ilgilendiriyor. Projeni ilgiyle takip ediyor olacağım, kolay gelsin... (Upscaler kısmında scanline opsiyonunu atlama lütfen )

Not: NeoGeo MVS konusunda board, yedek parça vs konusunda bir ihtiyacın olursa yabanellerde aramana gerek yok, bana bir mesaj atman yeterli
Logged

eins
Uzman
*****
Mesaj Sayısı: 1.799


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #10 : Haziran 23, 2016, 14:42:07 ÖS »

Evet ben bir önceki postumda işler HDMI64'e göre daha kolay olacak demiştim ama hesap pek de çarşıya uymadı. Öncelikle Neo Geo'nun RGB çıkış zamanlamasına bakmamız gerekiyor. Çıkış çözünürlüğü 320x224 piksel ve pixel frekansı 6 MHz. Excel'de bir tablo hazırlayarak kullanmayı düşündüğümüz 640x480 VGA zamanlaması ile kıyaslıyoruz.



Tabloda dikkat edilecek konu, Neo Geo'nun 64uS olan bir satır tarama süresinin, VGA'in 31.775 uS olan satır tarama süresinin tam katı olmaması. Her bir satırı iki kere tekrarlayacağımız için (scan doubling), Neo Geo satır tarama süresi 64uS değil, 63.555uS olmalıydı. Ne olacak canım azıcık küsürat farkı var diyebilirsiniz. Ama hatırlayın, frame buffer RAM kullanmadığımız için, bu küsüratlar her satırda birikecek ve sonuçta giriş ve çıkış görüntüsü arasında senkron kopacaktır. Bir şekilde Neo Geo 1 satır tarayana kadar bizim tam olarak 2 iki adet VGA satırı taramamız gerekiyor.

Zamanlama bu kadar hassas olduğu için, FPGA kartını bağımsız bir clock kaynağı ile süremeyeceğimiz de gün gibi ortaya çıkıyor. Bir şekilde FPGA Neo Geo ile senkron bir clock ile sürülmeli. HDMI64 projesinde video decoder chipi gelen video sinyaline senkron bir clock frekansı üretiyordu ve biz onu kullanıyorduk. Bu projede bu şekilde kullanabileceğimiz bir clock da yok.

Son olarak gene tabloya bakıyoruz ve Neo Geo nun bir Frame'inin 264 yatay satırdan oluştuğunu görüyoruz. Halbuki 640x480 VGA standardında toplam 525 satır olmalı. 264 yatay satırı scandoubling ile ikiyle çarpınca da 528 satır ediyor. Elimizde 3 tane fazla satır oldu şimdi.

NOT: Neden 480 değil de 525 diye sorabilirsiniz. Görüntü formatlarının adlandırılması bizim gördüğümüz kullanılabilir piksel sayısını ile yapılır. Aslında tarama bitipte raytrace ekran başına gelene kadar görünmeyen (ama bilgi taşıyabilen) satırlarda iletilir. Bu sebeple 640x480 formatında 800x525 piksel gönderilir.

Neyse probleme geri dönersek, Neo Geo nun Refresh rate değeri 59.1856 iken standarda göre 640x480 VGA 59.9 Hz olmalı.

Bu üç problem nasıl aşılabilir?

Başka bir benzer çalışmada (https://github.com/charcole/NeoGeoHDMI), geliştirici şöyle bir çözüm üretmiş. Madem FPGA frekansları senkron olmalı ve frame rate değerleri tutmuyor, o zaman Neo Geo'nun kendi clock'unu iptal ederek, FPGA tarafında oluşturulan clock ile Neo Geo'yu sürerim demiş. (Neo Geo'yu biraz overclock etmiş.)

Ben bu çözümü sevmedim. Tamam video çıkışından dijital sinyal almak için bir kaç lehim yaptım ama osilatörü söküp Neo Geo'ya clock enjekte etmek falan temiz bir çözüm gibi gelmedi bana şu aşamada.

Öncelikle Clock senkron problemi için, Neo Geo'nun kendi 24MHz clock sinyalini FPGA'e alarak PLL'den geçirdim ve FPGA içerisinde kullanılacak clock sinyallerini ürettim. Bu sayede tüm clocklarımız Neo Geo ile tam senkron olmuş oldu.

Sonrasında bu clock'u kullanarak VGA sinyal üretmeyi denedim ve DVI bağlantı ile monitörde denedim.

Bir başka NOT: DVI Aslında HDMI ile çok benzer. Çok kabaca içerisinde ses olmayan HDMI diyebiliriz. Zaten bu sebeple pasif HDMI>DVI adaptörler yapılabiliyor. Ben de şimdilik bu şekilde DVI bağlantısı yapıyorum.



Hemen arkasından gerçek uygulamada kullanacağımız 4:3 monitörde sonucu kontrol ediyoruz. Bağlantı DVI.



Bu arada daha bu aşamada test pattern oluştururken bile scanline effecti unutmuyoruz.

Son olarak RGB bitlerini bağlayarak FPGA içerisine Neo Geo dan sinyal elıyoruz. Sonuç beklediğimiz gibi hüsran. Zira henüz Neo Geo clock'u ile standart VGA sinyal üretmeye çalışıyoruz ve doğal olarak senkron tutmuyor.



Bu arada masamdaki monitörde çalışmak daha rahat olduğu için zaman zaman monitor değiştiriyorum, nasıl olsa aynı sonucu 4:3 monitörde aldığımızı gördük, en son o monitöre geri döneceğiz.
Neyse en azından RGB datasını direnç bölücülerle doğru düzgün FPGA içerisine alabildiğimiz görmüş olduk...
Logged

Simon (Özay Turay)
Genel Yönetici
*****
Mesaj Sayısı: 6.279


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #11 : Haziran 23, 2016, 15:04:30 ÖS »

4:3 monitörün güzelmiş. Kahkaha

İlk test sonuçlarını görmek de ayrı bir güzel oluyor tabi, fotoroman tadında. Emeğine sağlık. Bana rehavet çöktüğü elimin yine hiçbir işe gitmediği şu günlerde sen hala tam performans devam ediyorsun. Maşallah diyelim de nazar değmesin.
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
eins
Uzman
*****
Mesaj Sayısı: 1.799


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #12 : Haziran 23, 2016, 15:07:29 ÖS »


Senkron problemimize dönecek olursak, tüm monitörler, Frame Rate ve timing konularında bir miktar toleranslıdır. Zira tüm görüntü kaynakları aynı kalitede ve hassasiyette değildir. Özellikle tam analog olan CRT sistemlerde bu toleranslar çok daha fazladır. Benim düşüncem bu toleranstan yararlanmak ve olabildiğince çekiştirmek. Burada birazcık kullanacağımız monitörün insafına sığınacağız. Genellikle çok katı olmuyorlar, göreceğiz.

Şimdi excele geri dönüyor ve VGA standardını biraz modifiye ediyoruz. Yeni tablomuz en sağdaki.



Yatayda 800 olması gerekirken 768 piksel göndereceğiz, düşeyde ise 525 satır yerine 528 satır göndereceğiz. Bu şekilde Neo Geo dan gelen sinyali hem yatayda hem de düşeyde doğrudan iki ile çarpabilmiş oluyoruz. Bakalım monitörler bu duruma ne diyecek.

Ha unutmadan bu arada FPGA kodumuz da aşağıda:

Bu kısım Neo Geo'dan gelen RGB video sinyalini uygun şekilde sample ederek, FPGA içerisindeki RAM'e alıyor...

Kod:
// ------------------------------------------------------
// Neo Geo RGB Video Input
// ------------------------------------------------------
// 6 MHz Pixel Clock
// 384 Pixels/Line
// 264 Lines/Frame
// 59.1856 Frames/Second
// ------------------------------------------------------
reg [1:0] InputClock;
reg pVSync, VSync;
reg pHSync, HSync;

always @(posedge VideoClock)
begin
InputClock<=InputClock+1;

// Her 4 Clock'ta bir, RGB değerlerini sample et... (24/4=6MHz)
if (InputClock[1:0]==0)
begin
RamWrData[4:0]<=InputRed[4:0];
RamWrData[9:5]<=InputGreen[4:0];
RamWrData[15:10]<=InputBlue[4:0];

// Horizontal Sync Detector & Input FIFO Reset ...
pHSync<=HSync;
HSync<=Sync;
if ((Sync==1) && (HSync==0)) RamWrAddr<=0; else RamWrAddr<=RamWrAddr+1;

// Vertical Sync Detector ...
if (RamWrAddr==182)
begin
pVSync<=VSync;
VSync<=Sync;
end;

end;

if (InputClock[1:0]==1) RamWrClock=0;
if (InputClock[1:0]==3) RamWrClock=1;

end

Bu kısım çıkış VGA Video Timing'i üretiyor. (Modifiye ettiğimiz şekilde)

Kod:
// ------------------------------------------------------
// VGA Signal Generator
// 640x480 VGA Video Output
// ------------------------------------------------------
// 800 Pixels/Line (Modified to 768)
// 525 Lines/Frame (Modified to 528)
// ------------------------------------------------------

reg [9:0] RasterX, RasterY; // 10 Bit X,Y Counters (0-1023)
reg regHSync,regVSync,regDrawing; // Synch Pulses

always @(posedge VideoClock)
begin

if (RasterX==767)
begin
if (((pVSync==0) && (VSync==1)) || (RasterY==527))
begin
RasterY<=0;
end else
begin
RasterY<=RasterY+1;
end
end

// Calculate Raster Position ...
RasterX <= (RasterX==767) ? 0 : RasterX+1;

// Encoder'in ihtiyacı olan Sync bilgilerini uret ...
regDrawing <= (RasterX<640)  && (RasterY<480);
regHSync <= (RasterX>=656) && (RasterX<752);
regVSync <= (RasterY>=490) && (RasterY<492);
end

Burada da çok basit bir şekilde RAM'deki RGB datasını çekerek üzerine scanline effect uygulayarak çıkışa veriyoruz.

Kod:
// ------------------------------------------------------
// Effects & Processing
// ------------------------------------------------------

reg [7:0] Red, Green, Blue;
reg [7:0] OutRed, OutGreen, OutBlue;

always @(posedge VideoClock)
begin
RamRdClock<=!RamRdClock;

RamRdAddr<=RasterX/2;

Red[7:0]<={RamRdData[4:0],3'b000};
Green[7:0]<={RamRdData[9:5],3'b000};
Blue[7:0]<={RamRdData[15:10],3'b000};

// Scanline Effect ...
if (RasterY[0]==0)
begin
OutRed<=Red*3/4;
OutGreen<=Green*3/4;
OutBlue<=Blue*3/4;
end else
begin
OutRed<=Red;
OutGreen<=Green;
OutBlue<=Blue;
end;

end

Veeeee, sonuç:





4:3 Monitörde deniyoruz, bu monitör de insaflı davrandı ve kızmadı...





Evet, biraz ayar istiyor, scanlineları çok abartmadım, 3/4 oranında ayarladım. 1/2 olarak ayarlayınca çok daha belirgin oluyor. Ayrıca her pikseli yatayda iki kere tekrarladığımız için buraya biraz piksel blending ekleyebiliriz, daha doğal olacaktır.

Son olarak kurulumun son haline ait bir foto:



Evet şimdilik bu kadar. Bir kaç gün sonra devam etmek üzere biraz ara veriyorum...
Logged

eins
Uzman
*****
Mesaj Sayısı: 1.799


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #13 : Haziran 23, 2016, 15:11:01 ÖS »

4:3 monitörün güzelmiş. Kahkaha

İlk test sonuçlarını görmek de ayrı bir güzel oluyor tabi, fotoroman tadında. Emeğine sağlık. Bana rehavet çöktüğü elimin yine hiçbir işe gitmediği şu günlerde sen hala tam performans devam ediyorsun. Maşallah diyelim de nazar değmesin.

Sağolasın. Aslında bende de acaip bir rehavet var. Gündelik işler iyice sıradanlaştı, hani nasıl desem bu sıcakta kalkıp işe gitmek bile gelmiyor içimden. Zaten bu döngüden bir şekilde kurtulmak için projeyi başlattım, biraz heyecan olsun da kan dolaşımı hızlansın niyetiyle... İşe de yaradı gibi. Kahkaha
Logged

eins
Uzman
*****
Mesaj Sayısı: 1.799


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #14 : Haziran 23, 2016, 15:58:45 ÖS »

Son olarak 138 in 1 kartuşu taktım, JAMMA kartı olmadan, kablo üzerinden Metal Slug 3 oyununu seçip başladım seyretmeye. Bir ufak video atmadan çıkmak olmazdı.

Logged

Sayfa: [1] 2 3 ... 19   Yukarı git
Yazdır
Gitmek istediğiniz yer: