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] 4 5 ... 19   Aşağı git
Yazdır
Gönderen Konu: NEO-GEO MVS Mini Bartop Kabin Projesi  (Okunma Sayısı 83021 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
eins
Uzman
*****
Mesaj Sayısı: 1.799


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #30 : Haziran 24, 2016, 01:19:50 ÖÖ »

Birisi benzer birşey yapmış burada. Son iki saattir tüm forumu baştan sona okudum.
http://www.neo-geo.com/forums/showthread.php?251707-NeoVGA-Lagless-pixel-perfect-line-doubler-for-Neo-Geo-MVS-and-AES

Bu da son satış ve faq başlığı:
http://www.neo-geo.com/forums/showthread.php?266052-NeoVGA-FAQ-and-Order-Thread

Ben mi birşeyleri atladım, yoksa bu arkadaş mı çok yavaş bilemiyorum ama 2 yılda bu aşamaya gelmiş. Neyse şaka bir yana, sanırım farklı Neo Geo slotlarında timing değerlerinde farklılıklar yaşamış ve bunlara karşı problem yaşadıkça önlemler almış.

Eğer bir PCB basacaksak öncesinde sanırım bazı testler yapmak gerekecek. Elinde farklı model slot olan arkadaşlardan test etmek için ödünç olarak slot talep ediyorum.

MV-1
MV-1A yavuzg gönderiyor, test edilecek
MV-1B yavuzg gönderiyor, test edilecek
MV-1C
MV-1F
MV-1FZ Mevcut, test edildi...
MV-2F İptal
MV-4F İptal
MV-4FS İptal
MV-6F İptal

Bunu yanı sıra bizim buralarda yaygın mıdır bilmiyorum ama CPS1 ve 2 den bahis edilmiş. Bu konuda birşeyler yapmak gerekir mi? Ödünç yada satılık CPS olan var mı?
« Son Düzenleme: Haziran 24, 2016, 01:50:34 ÖÖ Gönderen: delimawi » Logged

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



Üyelik Bilgileri
« Yanıtla #31 : Haziran 24, 2016, 01:31:20 ÖÖ »


Anladım, şimdi belki benim elimdeki eski 4:3 monitörün kandella değeri de düşük olabilir emin değilim ama 1 e 1 yapınca aslında ışık miktarını toplamda %50 ye düşürmüş oluyoruz. Ekran daha bir sönük oluyor. CRT te tabi cayır cayır yanıyor fosfor ama en azından bendeki LCD biraz sönük kaldı. Ama bu zaten kolay birşey ayarlamak kolay.


Işığın düşmesi önemli değil, isteyen parlaklığını açabilir. Önemli olan MAME'deki gibi yani "suret gibi" bir suni görüntü olmaması.



A bak buna çok şaşırdım. Diğer projeler bir şekilde üretilebilecek ihtiyaç olacak şeylerdi de bu en azından çok spesifik bir çözüm. Doğrudan Neo Geo için yani. Hiç ihtiyaç olacağını düşünmemiştim hatta doğrudan development board olarak kabine yerleştirecektim. PCB Çizmeye bile gerek görmüyordum.


Projenin odağını saptırmak istemem. Gerekirse ben de basarım PCB'yi. Sadece FPGA programlayamıyorum ki onda da senden yardım isterim olmadı.

Elbette ki çok popüler bir konu değil ama örneğin konsollaştırılmış bir NeoGeo sisteminde özellikle scanline destekli Analog VGA çıkış opsiyonu güzel bir özellik olur Burada vurgulamaya çalıştığım esas konu line-doubling'den ziyade line-doubling işleminin kolay bir yan ürünü olan scanline etkisi. Evet, NeoGeo'nun normal video çıkışını LCD tabalı bir TV'ye hiçbir aktif devreye ihtiyaç duymadan da bağlayabiliyorsun ancak 15Khz'lik görüntüyü modern LCD TV'ler çamur gibi bir etkiyle upscale ediyor. Halbuki burada sen o işi LCD TV'ye bırakmadan olması gerektiği gibi scanline da ekleyerek upscale ediyorsun.


10 tane göndermeye korkarım ama bir PCB çizip çok az miktarda basıp deneriz değişik monitörlerde.


Dediğim gibi, hele sen bi esas projeni bitir, 10 tane konusuna bakarız Benim işimi 10 tane programlanmış FPGA da görür

Logged

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



Üyelik Bilgileri
« Yanıtla #32 : Haziran 24, 2016, 01:35:31 ÖÖ »

1A ve 1B gönderebilirim sana. Adresini PM at...

FZ varmış zaten sende.

2, 4 ve 6 slot bulman zor türkiye'de. Bence gerek de yok. Hem büyükler, hem çok akım çekerler hem çok arızalanırlar hem de xxx-in-1 kartuş olayında multi-slot MVS gereksiz...
Logged

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


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #33 : Haziran 24, 2016, 01:46:32 ÖÖ »

Evet, NeoGeo'nun normal video çıkışını LCD tabalı bir TV'ye hiçbir aktif devreye ihtiyaç duymadan da bağlayabiliyorsun ancak 15Khz'lik görüntüyü modern LCD TV'ler çamur gibi bir etkiyle upscale ediyor. Halbuki burada sen o işi LCD TV'ye bırakmadan olması gerektiği gibi scanline da ekleyerek upscale ediyorsun.

Bu konuda bir notum var yalnız. Modern TV lerde kullanılan video input processor entegrelerine birkaç projede az da olsa kod yazma tecrübem oldu, çalışma yapılarını çok iyi biliyorum, birçok farklı markaya ait kaynak kodları inceledim. Sonuçta hiç bir zaman panelin kendi native çözünürlüğünde sinyal uygulamadıkça (hatta uygulansa bile) gene de o eski analog sistemlerde olduğu gibi sinyal doğrudan panele ulaşmıyor. Gene digitize ediliyor, frame buffer'a alınıyor, color processingden geçiyor, panele uygun LVDS yada her ne kabul ediyorsa o format ve refresh rate e çevrilip gönderiliyor.

Daha da kötüsü, iyi olarak bildiğimiz bazı markalarda bile, yok noise reduction, de-interlace filtering vb binbir işlemden geçerek geliyor o görüntü ekrana.

Yani bu modern sistemlere, istediğin kadar net ve standarda uygun sinyal gönder, o bildiğini okuyor.

Tabiki araya bir ekstra frame buffer eklemek, ek bir latency yaratacaktır. Yada 240p sinyal gönderince TV onu native hale sokana kadar dediğin gibi iyice çamur yapacaktır kabul ediyorum. Ama line doubled sinyal gönderince de TV'nin ona hiç dokunmadan göstereceğini ümit etmemek lazım.
« Son Düzenleme: Haziran 24, 2016, 01:51:47 ÖÖ Gönderen: delimawi » Logged

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



Üyelik Bilgileri
« Yanıtla #34 : Haziran 24, 2016, 02:24:31 ÖÖ »

genişlik 55 cm olacaksa 2. kontrolü koymaman daha iyi olur diye düşünüyorum, çok sıkışık olur yoksa.
gamepad iyi düşünce dediğin gibi garekirse bir porttan bağlayıp 2 kişi oynanabilir.
kabin tek kontrol olursa denge ve sarsıntı sorunu büyük ölçüde azalır
altına sert lastik yada kauçuk bilmiyorum tam malzemeyi yarım küre ayaklar oluyor ondan koyarsan iyi olacaktır
yine de artı olarak ek ağırlığa ihtiyaç olabilir bence çünkü dövüş oyunlarında ciddi şekilde abanacaksın makineye
makinenin alt kısmında biraz yükseklik bırakıp işini görecek kalınlıkta bir çelik plaka koyabilirsin önce ince plaka denersin baktın kurtarmıyor daha kalın bir plaka koyarsın
önce plaka kullanmazsın, cihazı kullanırken ne kadar ihtiyaç olacağını net görmüş olursun ona göre plakayı koyabilirsin
ihtiyaç olma olasılığı yüksek olacaktır onun için tasarımda bunu düşünerek yaparsan bence iyi olur
zaten kauçuk ayaklar için tabanda içe bir derinlik bırakmak gerekecek bu derinliği bu konuyu da hesaba katarak ayarlayabilirsin diye düşünüyorum
Logged
yavuzg
Genel Yönetici
*****
Mesaj Sayısı: 5.163



Üyelik Bilgileri
« Yanıtla #35 : Haziran 24, 2016, 02:36:10 ÖÖ »


Tabiki araya bir ekstra frame buffer eklemek, ek bir latency yaratacaktır. Yada 240p sinyal gönderince TV onu native hale sokana kadar dediğin gibi iyice çamur yapacaktır kabul ediyorum. Ama line doubled sinyal gönderince de TV'nin ona hiç dokunmadan göstereceğini ümit etmemek lazım.


Elbette panelin native çözünürlüğüne inemeyiz ancak özellikle SCART girişinden verdiğin 240p (veya 480i) ile VGA girişinden verdiğin 480p arasında büyük fark oluyor benim Samsung'da... Muhtemel TV'den TV'ye üreticiden üreticiye değişiyordur ama benim şüphem SCART girişine uyguladıkladıkları ucuz (ya da ucuz demiyelim de oyun için değil bir video seyretmeye optimize edilmiş) de-interlace katmanı ve uygulanan filtre. Sanırım VGA portundan gelen 31Khz'lik bir sinyal biraz daha farklı bir yol izliyor olabilir LCD'nin içinde...
Logged

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


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #36 : Haziran 24, 2016, 19:26:47 ÖS »

Dün Yavuz Abi, Analog VGA olanı da olsun dedikten sonra bu sabah denemek istedim. Çok basit bir DAC yaparak hemen FPGA'e bağladım. Zaten Neo Geo'nun orjinal DAC çıkışı da bu şekilde direnç bölücülerle yapılmış.

Bir VGA kablosunu keserek, R,G,B, V Sync, H Sync ve GND uçlarını dışarı alıyoruz. Benim kullandığım direnç değerleri 3.3K, 1.5K, 860, 330 ve 150 Ohm. Neo Geo da biraz daha farklı değerler kullanılmış ama elimde olmadığı için bu şekilde yaptım.



R,G,B için 5 bit oluşturacak şekilde dirençleri aynı noktaya doğru lehimledikten sonra oluşan ortak uca 150 ohm seri direnç ekledim. Bunun sebebi monitör içerisinde teorik olarak bulunması gereken 75ohm sonlandırma direnci üzerinde maksimum 0.7v sinyal oluşturmak.

Fotoda görülen sarı ve beyaz kablolar ise V Sync ve H Sync.

FPGA Kodumuz aşağıdaki hale geldi bugün. Ayrıca koda denemek için 3 farklı seviyede piksel blending ekledim. Çok hoş oldu. (Yatayda yan yana gelen pikselleri 0,1 yada 3 piksele kadar blend edebiliyoruz bu opsiyon ile. Analog CRT emülasyonu havası veriyor.)

Kod:
// ----------------------------------------------------------------------------
// VGA Encoder Module
// [url]www.commodore.gen.tr[/url] - delimawi'2016
// ----------------------------------------------------------------------------

module VGA_Encoder
(
// Video Input
input [4:0] InputRed,
input [4:0] InputGreen,
input [4:0] InputBlue,

// Video Sync Signal
input Sync,
input DAC_Clock, // 6 MHz Neo Geo Video DAC Clock

// Video Clock
input VGA_Clock, //  25 MHz VGA Clock

// Scanline RAM Write
output reg [9:0] RamWrAddr,
output [15:0] RamWrData,

// Scanline RAM Read
output [9:0] RamRdAddr,
input    [15:0] RamRdData,

// Analog VGA Output
output reg [4:0] VGA_Red,
output reg [4:0] VGA_Green,
output reg [4:0] VGA_Blue,
output reg VGA_H_Sync,
output reg VGA_V_Sync
);

// ----------------------------------------------
// Output Timing
// ----------------------------------------------

`define DISPLAY_WIDTH 640
`define DISPLAY_HEIGHT 480
`define FULL_WIDTH 768
`define FULL_HEIGHT 528
`define H_FRONT_PORCH 16
`define H_SYNC 96
`define V_FRONT_PORCH 10 // 10
`define V_SYNC 2

// ------------------------------------------------------
// Neo Geo RGB Video Input
// ------------------------------------------------------
// 6 MHz Pixel Clock
// 384 Pixels/Line
// 264 Lines/Frame
// 59.1856 Frames/Second
// ------------------------------------------------------

// ----------------------------------------------
// Route NeoGeo Video Data to FIFO RAM ...
// ----------------------------------------------
assign RamWrData[4:0]   = InputRed[4:0];
assign RamWrData[9:5]   = InputGreen[4:0];
assign RamWrData[14:10] = InputBlue[4:0];

reg [1:0] InputClock;
reg pVSync, VSync;
reg pHSync, HSync;

reg [0:8] VSyncCounter;
always @(posedge DAC_Clock)
begin
if (InputClock[1:0]==0)
begin
// 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;
if (Sync==1) VSyncCounter<=0; else VSyncCounter<=VSyncCounter+1;
end;
end;
end

// ------------------------------------------------------
// VGA Signal Generator
// 640x480 VGA Video Output
// ------------------------------------------------------
// 800 Pixels/Line (Modified to 768)
// 525 Lines/Frame (Modified to 528)
// ------------------------------------------------------
reg [9:0] VGA_X_Pos, VGA_Y_Pos;

assign RamRdAddr=VGA_X_Pos>>1;

always @(posedge VGA_Clock)
begin

// VGA Raster Counters
if (VGA_X_Pos==(`FULL_WIDTH-1))
begin
VGA_X_Pos<=0;

if ( (VGA_Y_Pos==(`FULL_HEIGHT-1)) || (VSyncCounter==13) )
begin
VGA_Y_Pos<=0;
end else
begin
VGA_Y_Pos<=VGA_Y_Pos+1;
end

end else
begin
VGA_X_Pos<=VGA_X_Pos+1;
end

VGA_H_Sync <= !( (VGA_X_Pos>=(`DISPLAY_WIDTH+`H_FRONT_PORCH)) && (VGA_X_Pos<(`DISPLAY_WIDTH+`H_FRONT_PORCH+`H_SYNC))  );
VGA_V_Sync <= !( (VGA_Y_Pos>=(`DISPLAY_HEIGHT+`V_FRONT_PORCH)) && (VGA_Y_Pos<(`DISPLAY_HEIGHT+`V_FRONT_PORCH+`V_SYNC)) );
end

// ------------------------------------------------------
// Effects & Processing
// ------------------------------------------------------

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

reg [4:0] pR0, pG0, pB0;
reg [4:0] pR1, pG1, pB1;
reg [4:0] pR2, pG2, pB2;

always @(posedge VGA_Clock)
begin
pR2[4:0]<=pR1[4:0];
pG2[4:0]<=pG1[4:0];
pB2[4:0]<=pG1[4:0];

pR1[4:0]<=pR0[4:0];
pG1[4:0]<=pG0[4:0];
pB1[4:0]<=pG0[4:0];

pR0[4:0]<=RamRdData[4:0];
pG0[4:0]<=RamRdData[9:5];
pB0[4:0]<=RamRdData[14:10];

// Pixel Blend Low
Red[7:0]= (pR0[4:0]+RamRdData[4:0])*4;
Green[7:0]= (pG0[4:0]+RamRdData[9:5])*4;
Blue[7:0]= (pB0[4:0]+RamRdData[14:10])*4;
/*
// Pixel Blend High
Red[7:0]= (pR0[4:0]+pR1[4:0]+RamRdData[4:0])*8/3;
Green[7:0]= (pG0[4:0]+pG1[4:0]+RamRdData[9:5])*8/3;
Blue[7:0]= (pB0[4:0]+pB1[4:0]+RamRdData[14:10])*8/3;
*/

// Red=((pRed+RamRdData[4:0])*4);
// Green=((pGreen+RamRdData[9:5])*4);
//  Blue=((pBlue+RamRdData[14:10])*4);

// Pattern
// if (RasterX[8]==0) Red<=255; else Red<=0;
// if (RasterX[7]==0) Green<=255; else Green<=0;
// if (RasterX[6]==0) Blue<=255; else Blue<=0;

// Scanline Effect & Frame ...
if ((VGA_Y_Pos==0) || (VGA_Y_Pos==479) || (VGA_X_Pos==0) || (VGA_X_Pos==639))
begin
  OutRed<=255;
  OutGreen<=255;
  OutBlue<=255;
end else

if (VGA_Y_Pos>=456)
begin
OutRed<=0;
OutGreen<=0;
OutBlue<=0;
end else
if (VGA_Y_Pos[0]==0)
begin
OutRed<=Red/2;
OutGreen<=Green/2;
OutBlue<=Blue/2;
end else
begin
OutRed<=Red;
OutGreen<=Green;
OutBlue<=Blue;
end;

end

// ------------------------------------------------------
// Analog VGA Output
// ------------------------------------------------------

always @(posedge VGA_Clock)
begin
// Pattern
// if (VGA_X_Pos[8]==0) VGA_Red<=31; else VGA_Red<=0;
// if (VGA_X_Pos[7]==0) VGA_Green<=31; else VGA_Green<=0;
// if (VGA_X_Pos[6]==0) VGA_Blue<=31; else VGA_Blue<=0;

// Non Blended Original Data
// VGA_Red[4:0]<=InputRed[4:0];
// VGA_Green[4:0]<=InputGreen[4:0];
// VGA_Blue[4:0]<=InputBlue[4:0];

if ((VGA_X_Pos<25) || (VGA_Y_Pos<10) || (VGA_X_Pos>=640) || (VGA_Y_Pos>=480))
begin
VGA_Red[4:0]<=0;
VGA_Green[4:0]<=0;
VGA_Blue[4:0]<=0;
end else
/*
if ((VGA_X_Pos==5) || (VGA_X_Pos>=635))
begin
VGA_Red[4:0]<=31;
VGA_Green[4:0]<=31;
VGA_Blue[4:0]<=31;
end else
*/
begin
VGA_Red[4:0]<=OutRed[7:3];
VGA_Green[4:0]<=OutGreen[7:3];
VGA_Blue[4:0]<=OutBlue[7:3];
end;

end

endmodule


FPGA iç şemamız da aşağıda. Burayı daha temizleyemedim, biraz karışık şimdilik.



FPGA Pin bağlantıları listesi de aşağıda.




Ben VGA çıkışını DVI'dan daha çok sevdim. Görüntü kalitesinde büyük bir fark yok ama DVI'da timing biraz şaşsa monitör görüntüyü kesiyordu. Benim monitörlerde sorun çıkarmadı ama muhtemelen monitör seçen bir yapı olacaktı. Analog VGA de ise, senkron, satır sayısı vb parametreleri iyice abartana kadar sorunsuzca görüntü alınıyor. Sanıyorum DVI kısmına devam etmeyeceğim.

Bir kaç yakın çekim görüntü aşağıda.









Logged

LW3D
Genel Yönetici
*****
Mesaj Sayısı: 10.296


Günü Kurtaran Avam Hiooargggh :)


Üyelik Bilgileri WWW
« Yanıtla #37 : Haziran 24, 2016, 19:36:37 ÖS »

ellerine sağlık...çok iyi görünüyor...
Logged

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



Üyelik Bilgileri
« Yanıtla #38 : Haziran 24, 2016, 19:41:33 ÖS »

görüntüler süper bu gidişle crtleri çöpe attıracaksın anlaşılan
Logged
Sensation
Deneyimli
*****
Mesaj Sayısı: 2.562


Killer Instinct


Üyelik Bilgileri
« Yanıtla #39 : Haziran 24, 2016, 22:09:59 ÖS »

Görüntüler sağlam cidden birde çıplak gözle görmek lazım...
Logged

i_r_on
Uzman
*****
Mesaj Sayısı: 2.866



Üyelik Bilgileri WWW
« Yanıtla #40 : Haziran 24, 2016, 22:50:19 ÖS »

Güzel iş çıkmış eline sağlık delimawi.
Logged

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

twitter | blog
mesa
Deneyimli
*****
Mesaj Sayısı: 856



Üyelik Bilgileri
« Yanıtla #41 : Haziran 25, 2016, 01:14:35 ÖÖ »

Goruntuler harika
Logged

Ps1 ps2 wii xbox 360 arcade kabin
Heroman
Deneyimli
*****
Mesaj Sayısı: 1.024



Üyelik Bilgileri
« Yanıtla #42 : Haziran 25, 2016, 12:22:01 ÖS »

Göruntuler cok süper elıne sağlık....
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.799


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #43 : Haziran 25, 2016, 21:27:25 ÖS »

Arkadaşlar beğenileriniz için çok teşekkür ederim.

Bugün daha önce sözünü etmiş olduğum oyun seçme arayüzüne dair ufak bir çalışma yaptım. 128x16 pixel OLED display board'u üzerine elimdeki PIC'lerden birini uzay montaj lehimledim. Malesef 1 tane yapılacağı için PCB çizme gereği duymadım buna. Monte edileceği yere OLED Display board üzerindeki montaj delikleri ile monte edilecek.



Buradan yukarı doğru giden çoklu kablo kartuşun oyun seçmek için kullanılan ara kablosuna gidiyor. PIC içerisine oyunların tam listesini yükledim. Aşağıya doğru giden 5 kablo ise, 4 adet butona bağlanacak. Oyun seçimi için, +, -, OK ve ESC tuşları olacak burada. PIC kodunu değiştirerek istemediğim oyunları (mesela PLUS versiyonlarını) çıkarabileceğim. Aynı şekilde istediğim şekilde sıralama yapmak da mümkün olacak. Aynı zamanda son seçilmiş olan oyun hafızada saklanıp (PIC'in EEPROM'u), konsol açıldığında doğrudan o oyun ile başlayacak.

Son olarak, kartuş içerisinden, normalde olmayan bir hat daha çektim. Bu hat ile konsola RESET atabiliyorum. Yani oyun seçilince, power cycle etmeden konsol otomatik olarak yeniden başlayarak seçilen oyun ile açılıyor.

İşin bu kısmı da kabataslak bitti. Belki PIC koduna rötuşlar, logo vb eklemesi yaparım kabin bitince.

Aşağıda bu fonksiyona ait hızlıca çekilmiş bir video ekleyerek günü bitiriyorum.

NOT: Bu arada elimdeki 138 in 1 kartuşun içerisinde, 138'den fazla oyun tıkıştırmışlar. Ama malesef çalışmıyorlar. Kahkaha Ya başlarda ya da oyun başlarken Memory Hatası verip crash ediyor unlisted olanlar. Sanırım deneyerek sadece çalışanları menüye almışlar, bu sebeple 138 gibi anlamsız bir sayıda oyun olmuş bu kartuşta.

Logged

Özgür Dereli
Uzman
*****
Mesaj Sayısı: 1.125



Üyelik Bilgileri
« Yanıtla #44 : Haziran 25, 2016, 22:00:06 ÖS »

Süper harika olmuş
Logged
Sayfa: 1 2 [3] 4 5 ... 19   Yukarı git
Yazdır
Gitmek istediğiniz yer: