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 KategoriProjeFrame buffer kullanmadan PAL > VGA mümkün olabilir mi?
Sayfa: [1] 2 3   Aşağı git
Yazdır
Gönderen Konu: Frame buffer kullanmadan PAL > VGA mümkün olabilir mi?  (Okunma Sayısı 24205 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« : Kasım 30, 2016, 20:34:42 ÖS »

Evet, bugün facebook'ta biri C64'den VGA monitöre çıkış almak mümkün olabilir mi tarzında bir soru sormuştu. Bunu biraz teknik olarak inceleyelim diye düşünüyorum.

Daha önce aslında PAL sinyali bir şekilde HDMI'a çevirmeyi başardık hatta içerisine ses de ekledik. Hatta hatta PCB çizimi bitince üretime girmeyi bekleyen bir proje kıvamına bile geldi.

Daha sonra Mini Bartop Kabin projesinde, bu devrenin bir varyasyonunu kullanarak VGA çıkış ürettik. Ama bu bazı konuların denk gelmesi ile mümkün oldu, şöyle ki; NEO GEO çıkışı aslında NTSC yani 640x480@60Hz. Bu da neredeyse VGA 640x480@60 Hz Industry standard (pixel clock 25.175 MHz) zamanlamasına denk geliyor. Bu sayede formatı çok az da olsa çekip bükerek VGA formatına sokabildik.

Gel gelelim C64 çıkışı PAL. PAL olunca işler biraz karışıyor. İnce ince VGA detayına girmeye bile gerek kalmadan, 50Hz bir VGA standardı olmadığını görebiliyoruz. VGA Refresh rateleri 60,72,75,85,100 vb.. şeklinde.

İşte bu noktada frame buffer kullanmadan PAL sinyalden VGA sinyal üretilebilir mi diye bir challenge ortaya konulabilir mi diye düşündüm. Belki de güzel bir proje çıkabilir.

Framebuffer konusunu biraz açıcak olursak, gelen sinyal hangi formatta olursa olsun, eğer bir framebuffer hafızamız varsa, gelen görüntüyü bu hafızaya depoluyoruz. Çıkış tarafında ise hangi formatta sinyal istiyorsak encoder bu framebuffer hafızasından görüntüyü okuyup istediği şekilde görüntüyü üretiyor. Dolayısı ile decoder ve encoder birbirlerinden izole ve senkron olmadan çalışabiliyor. Bu da giriş ve çıkış formatları seçiminde büyük esneklik sağlıyor. Piyasadaki neredeyse tüm çeviriciler bu mantık ile çalışır.

Dezavantajları ise, ram maliyeti, screen tearing ve işleme gecikmesi olarak karşımıza çıkıyor.

Framebuffer kullanmayan sistemlerde ise (ki benim zaafım olan sistemler ) giriş ve çıkış tam senkronizasyon içerisinde çalışmalı. Yani gelen sinyal tam bir satır taradığında çıkış sinyali de aynı satırı aynı zamanda tarıyor olmalı. (NOT: Eğer line doubling yapılıyorsa örneğin, bir satır geldiğinde çıkış tam iki satır üretebiliyor olmalı vb.)

Burada framebuffer kullanmadan VGA sinyali üretme hedefine ulaşmak için şu an için gördüğüm en yakın çözüm PAL 720x576@50Hz sinyale karşılık, SVGA 800x600@56Hz formatını kullanmak. Evet ilk bakışta tam uyuşmadıklarını görüyoruz. Ama PAL'e en yakın VGA formatı bu.

Hatta şöyle bir hesap yaptım. SVGA sinyalin pixel frekansı normalde 36MHz. Bunu eğer 32MHz'e çekebilirsek neredeyse PAL sinyal ile zamanlamayı tam olarak tutturabiliyoruz.



EDIT: Tekrar okurken farkettim, yukarıdaki hesabı biraz açıklamak lazım. Normalde SVGA sinyalinde bir satır tam 28.44444444 uS de taranır ve pixel frekansı da 36MHz dir. PAL sinyalde ise (C64 assembly yazanlar iyi bilir) bir satır tam 64uS dir. Şimdi amacım C64 tam bir satır taradığında, yani 64uS de ben SVGA'de iki satır tarıyor olacağım. Yani line doubling yapacağız. Bu durumda SVGA satır zamanı 32uS olmak durumunda. Normalde 28.4444 olan zamanlamayı yaklaşık %10 yavaşlatarak 32uS ye çekersek bu iş olur. Bu hesap o hesap.

http://tinyvga.com/vga-timing/800x600@56Hz


Tabi bu sinyale monitörler itiraz edecekler mi bilemiyorum. İleriki günlerde vaktim olduğunca FPGA ile yukarıda 32MHz'e modifiye ettiğim SVGA sinyali oluşturmaya çalışıp monitörlerin bu sinyale olan tepkilerini test edeceğim.

Eğer başarılı olursa belki bir de ucuz yollu FPGA tabanlı C64>VGA adaptör projesi çıkartabiliriz.

İyi akşamlar.
« Son Düzenleme: Kasım 30, 2016, 20:56:10 ÖS Gönderen: delimawi » Logged

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


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #1 : Kasım 30, 2016, 20:57:20 ÖS »

Döktürmüşsün gene, inşallah monitörler itiraz etmez bu hesaplara.
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
KNG
Üye
****
Mesaj Sayısı: 315



Üyelik Bilgileri
« Yanıtla #2 : Kasım 30, 2016, 21:49:35 ÖS »

Ucuz yollu c64-vga dönüştürücü harika olur, güzel haberleri bekliyoruz.
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #3 : Aralık 01, 2016, 09:34:12 ÖÖ »

Bu sabah heyecanla sabah kahvemi içerken şu 800x600 50Hz konusunu hızlıca bir denemeye karar verdim.

Öncelikle FPGA ile 800x600@56Hz normal bir SVGA patern üretip test ettim. Elimdeki 3 monitörde de sıkıntı çıkarmadı.

Daha sonra 36MHz olan pixel frekansını 32MHz e doğru kısmaya başladım. 34MHz de hala elimdeki ilk monitör olan LG TV itiraz etmedi. Yenileme frekansı 53Hz'e düşmüştü bu sayede. Hedefimiz 50Hz.



32MHz e indiğimde, yani yenileme frekansı 50Hz olduğunda çok ilginç birşey oldu.



Bu monitör aynı zamanda TV olduğundan mı bilmem 50Hz'i görünce sinyalin aslında 800x600 değil PAL olduğuna karar verdi alet. Bakın 720x576 yazıyor. Bu PAL sinyalin ölçüleri.

Çok şaşırdım hemen bir başka monitöre verdim sinyali. Bu da LCD ancak TV özelliği olmayan bir ASUS monitör.



Bu monitör gelen sinyalin bilgilerini vermiyor, dolayısı ile ne olarak algıladığını bilmiyorum. Ama en azından problem çıkarmadan 50Hz sinyali gösteriyor.

Son olarak elimdeki çok daha eski olan Bartop için kullandığım 3:4 monitörde deniyorum.



Her 3 monitör de bir şekilde problem çıkarmadan test patterni göstermeyi becerdi. Bu iyi haber. Bu 50Hz VGA işincen bir proje çıkacak gibi görünüyor. Belki her monitörde çalışmayacak ama bir çoğunda özellikle güncel monitörlerde çalışacağına ikna oldum...
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
evreno
Deneyimli
*****
Mesaj Sayısı: 1.267



Üyelik Bilgileri
« Yanıtla #4 : Aralık 01, 2016, 10:24:33 ÖÖ »

c64 cüler dört gözle takip ediyordur
arcade monitörleri gömdün, sıra 1084 ler de yani
1084 ler de tozlu raflara gidecek anlaşılan
Logged
Levent (Lvnt)
Uzman
*****
Mesaj Sayısı: 2.392



Üyelik Bilgileri
« Yanıtla #5 : Aralık 01, 2016, 10:32:10 ÖÖ »

Meseleyi kısaca şu şekilde anlıyorum: Hiçbir buffer kullanmayınca monitör çok kısıtlı kullanılabilyor ve 1 pixel gecikme oluyor; frame buffer kullanınca video sinyali herhangi bir modda kullanılabiliyor, 1 frame gecikme oluyor.

Peki line buffer kullanılırsa ne olur? 1 satır gecikme ile line herhangi bir uuznluğa scale edilebilir hale gelir, line doubling tripling vb ile birlikte kullanılırsa sonuç olarak her monitör modu kullanılabilir hale gelir diye düşünüyorum
« Son Düzenleme: Aralık 01, 2016, 10:34:03 ÖÖ Gönderen: Lvnt » Logged

Use the brute force, Luke
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #6 : Aralık 01, 2016, 10:43:38 ÖÖ »

@Lvnt,

Hiç buffer kullanmayınca haklısın dediğin gibi bir piksel olur gecikme. Ama bunun işe yarar bir tarafı yok. Yani iki format arasında bir dönüşüm yapmamış oluruz.

Frame buffer kullanılınca en azından bir frame ama bir çok sistemde daha çok olabiliyor gecikme. Yani ara buffer tek frame için değil genelde birkaç frame alabilecek şekilde fifo yapılıyor. Bazı sistemlerde 2-3 frame'e kadar gecikme olabiliyor. Özellikle görüntü üzerinde işlem yapılıyorsa.

Ben tüm frame'i bufferlamıyorum ama satırı bufferlıyorum. Yani dediğin gibi line buffer var. Gecikme bir yada iki satır. (64uS ki insanoğlu bu gecikmeyi hissedemez.)
Bu sayede line doubling vb yapabiliyorum ki gene bu sayede scanline effect verebiliyoruz.

Ama malesef her monitör modu kullanılamıyor. Çünkü line buffer olsa bile, gelen sinyal bir satır taradığında, çıkışa da tam aynı sürede bir, iki yada üç farketmez, tam sayıda satır taramış olmak gerekiyor ki, line buffer şişmesin.

Kısaca gelen sinyalin bir satırı tarama süresi ne ise, çıkış sinyalinde o sürenin tam katı olmak zorunda.

İkinci kural da satır sayıları giriş ve çıkış için birbirlerinin tam katı olmak durumunda. Yani giriş sinyali 320 satır ise örneğin çıkış ya 320, ya 640 ya da 960 satır olmak zorunda ki bir frame'i tam aynı anda bitirebilmiş olsunlar...
Logged

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


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #7 : Aralık 01, 2016, 11:14:45 ÖÖ »

Çok güzel haberler.

Yalnız benim kafama birşey takıldı: Kahveyi mi heyecanla içiyordun yoksa kararı mı heyecanla verdin? 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 #8 : Aralık 01, 2016, 11:22:02 ÖÖ »

Çok güzel haberler.

Yalnız benim kafama birşey takıldı: Kahveyi mi heyecanla içiyordun yoksa kararı mı heyecanla verdin? Kahkaha

Hahaha, hakikaten komik olmuş okuyunca...
Dün akşam postu atınca aklımda kaldı konu. Evde deneyebileceğim hiçbirşey yok sadece teorik çalışabiliyorum, heyecanla ofise gidimde şunu bir deneyim diyordum kendi kendime...
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Levent (Lvnt)
Uzman
*****
Mesaj Sayısı: 2.392



Üyelik Bilgileri
« Yanıtla #9 : Aralık 01, 2016, 12:53:05 ÖS »

Yazıyı okuduğumda buffersiz sanmıştım.

Meseleyi anladım. Gözden kaçırdığım şey pal kaynağın yavaş ve hedef vga'nın hızlı tarama yapmasından ötürü oluşan senkron sorunu. örneğin vga 800x600@120hz'de pal bir satırı bitirdiğinde vga taraması çok hızlı olduğu için ekran üzerinde yer olarak pal satırından başka başka yerlere gelmiş oluyor. Senkron sorunu sebebiyle line buffer ile (ya da buffersiz) birçok modda dönüştürme yapılamıyor. Dolayısıyla line buffer ile yapılabilecekler çok sınırlı kalıyor.

Zor problemlerin üstesinden gelmeye çalışmak çok heyecanlı olabiliyor, bunu inkar edemem, bu şekilde çok da vakit harcamışlığım vardır. Ama sanırım bu kadar kısıtlamaya ben olsam 1 frame gecikmeyi göze alıp framebuffer kullanırdım. Fb'siz çalışmayı sağlamak için harcayacağım zamanı da gecikmeyi 2 frame'in altında tutmak için harcardım. Böylece biraz gecikmeye karşılık her monitörde herhangi bir modda çalışabilmeyi elde ederdim. Frame gecikmesi çok mu önemli gibi cevaplarını bilmediğim kilit sorular olduğu için yanılıyor da olabilirim tabi.

Heyecanlı konuymuş, işi gücü bırakıp anlamaya çalıştım, kolay gelsin
« Son Düzenleme: Aralık 01, 2016, 12:55:38 ÖS Gönderen: Lvnt » Logged

Use the brute force, Luke
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #10 : Aralık 01, 2016, 13:29:01 ÖS »

@lvnt,

Evet aslında framebuffer kullanmak mantıklı olabilir. Ama ben hızlı, kolay ve ucuz birşeyler çıkartmaya çalışıyorum. Tek bir ucuz FPGA çipi içerisinde bir miktar RAM bulunuyor. Ancak bu RAM framebuffer olarak kullanmak için yeterli değil. Ancak birkaç satırlık linebuffer yapılabilir. Eğer framebuffer kullanıcaksak dışarıya ayrıca bir RAM eklemek gerekicek. Bunu eklesek bile bu RAM'e hem encoder, hem de decoder asenkron olarak erişmek isteyeceği için bir share logic implement etmek gerekicek. Kısacası daha zor ve pahalı bir çözüm olacak.

Aslında bunların hepsi mümkün ve zaten yapılıyor ama örneğin çinli amcam ufacık bir PCB üzerinde custom bir çip ile bu işi çok ucuza halledip aşağıdaki linkteki gibi cihazları yapabiliyor. Biraz da işin ruhunu bilse programcılar ve iki tık daha kaliteli yazsalar yazılımları gerçeten iş görecek bu cihazlar. Donanımsal sıkıntı yok yazılım kalitesizliği var hep. Bu custom çiplerin toolchain'leri de sağda solda bulunmadığından biz de oturup bu cihazlara firmware yazamıyoruz malesef.

https://tr.aliexpress.com/item/New-VGA-To-Video-PC-laptop-Composite-Video-AV-S-Video-RCA-to-PC-Laptop-VGA/32618027483.html

https://tr.aliexpress.com/item/High-Quality-Real-HD-1080P-Chip-1920-1080-60Hz-HDMI2AV-Hdmi-to-RCA-AV-CVSB-L/32709108622.html
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Levent (Lvnt)
Uzman
*****
Mesaj Sayısı: 2.392



Üyelik Bilgileri
« Yanıtla #11 : Aralık 01, 2016, 16:06:16 ÖS »

768x288 ya da 384x288 fb kurtarmazmı? Her pixel 16 bit ya da 12 bit?
Logged

Use the brute force, Luke
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #12 : Aralık 01, 2016, 16:19:08 ÖS »

Bu çözünürlüklerde VGA formatı var mı?

Ben şu listeden bakıyorum.
http://tinyvga.com/vga-timing

Bir de saniyedeki yenileme sayısı çok önemli. Şimdi pal 50Hz ya, seçtiğimiz VGA formatının da 50Hz olması şart. Çünkü fb kullanmadığımız için aynı sürede bir frame taranması şart.

16bit yada 15bit uygun olur. 12 biraz düşük kalabilir.
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Levent (Lvnt)
Uzman
*****
Mesaj Sayısı: 2.392



Üyelik Bilgileri
« Yanıtla #13 : Aralık 01, 2016, 16:51:27 ÖS »

Xwindow'da tam ekran mame oynayacağım diye 384x288 ve tam ekran tv için 768x576 modeline'lerim vardı... bir zamanlar. 768x576 modeline diye aratınca şu sayfada bir sürü modeline çıktı:
http://geocities.ws/podernixie/htpc/modes-en.html

Ben renkleri yuv olarak saklamayı tercih ederdim. Görüntü kalitesi yüksek olur, renk kalitesi düşer ama insan gözü aydınlığa renklerden daha hassas olduğu için aynı bit derinliğindeki rgb'den daha iyi sonuç elde edilir.

2 pixel için ortak u ve v olunca 2x8-bit intensity + 8-bit u + 8-bit v = 32, 2 pixel olduğu için pixel başına 16-bit

4 pixel için ortak u v olursa 4x8-bit + 8-bit u + 8-bit v = 48-bit, 4 px olduğu için pixel başına 12-bit. Bu ikincisinin renk kalitesi düşük tabi
Logged

Use the brute force, Luke
LW3D
Yönetici
*****
Mesaj Sayısı: 11.415


Günü Kurtaran Avam Hiooargggh :)


Üyelik Bilgileri WWW
« Yanıtla #14 : Aralık 01, 2016, 20:13:57 ÖS »

heycan verici bir proje daha...teşekkürler delimawi
Logged

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