Merhaba arkadaşlar, uzun bir aradan sonra tekrar bir projeye başlıyorum. Bir kaç gün önce konu ile ilgili olarak bir topik açmıştım. Gelen geribildirimler doğrultusunda bu yaz için Amiga ailesi için bir HDMI scandoubler yapmaya karar verdim.
Bu sefer öncekilere nazaran biraz daha teknik bir topik olacağını düşünüyorum zira proje esnasında karşılaşacağım tüm detayları not edeceğim, paylaşacağım. Bir çok kişi için sıkıcı olsa da en azından kalıcı bir dökümantasyon bırakmış olacağız.
Öncelikle ne hedefliyoruz, bu projenin amacı ne?
Temelde ihtiyacımız, A500 ve hatta uyumlu olduklarına "inandığım" için A600 ve A1200'ü güncel bir TV yada LCD/LED Monitöre bağlayabilmek.
Daha önce FPGA Günlükleri yazımda, basit bir FPGA ile HDMI çıkış elde etmeyi başarmış, HDMI64 projesi ile de, C64'ü HDMI üzerinden güncel TV/Monitörlere bağlayabilmiştik. (NOT: Bu arada HDMI64 test PCB'leri 20 adet basıldı ve şu an yoldalar.)
Amiga projesinde de benzer şekilde bu işi HDMI ile kotarmayı düşünüyorum, zira HDMI kısmı ile ilgili olarak bir çok detay çözülmüş durumda. HDMI ile ilerlemnin bir başka avantajı ise, ses sinyalini de tek kablo ile taşıyabiliyor olmak. Gene bir başka esneklik, gerçi artık güncel tüm monitörlerde var ama, HDMI girişi olmasa bile, HDMI sinyali DVI sinyali ile uyumlu olduğundan proje pasif bir adaptör ile DVI girişli monitörlerle de kullanılabilir olacaktır.
Gelelim HDMI64'den farklılaştığımız taraflara. Öncelikle HDMI64'de C64'ün Luma/Chroma çıkışlarını kullanıyorduk. Amiga'da ise, hazırda RGB datası mevcut olduğundan bu sinyalleri kullanmak daha mantıklı. Daha mantıklı aslında yetersiz kaldı, RGB sinyallerini kullanmak zorundayız çünkü A500'de CVBS sinyalinde Chroma bilgisi yok, kısaca siyah beyaz. (A600 de renkli ancak tüm aileyi desteklemek istiyoruz.) Bu durumda HDMI64'ün giriş katındaki video decoder doğrudan ekarte olmuş oldu, çünkü o yada benzeri çipler RGB decode edemiyor. Yeni bir decoder çip bulacağız.
Ha bu noktada hızlı geçtim, aslında şöyle bir opsiyon daha var. Amiga'nın bu yukarıda bahsettiğim RGB çıkışı aslında içeride Denise çipinden 3x4=12 bit olarak çıkıyor ve digital olarak mevcut. Yani aslında RGB video decoder çipine ihtiyacımız yok. Ancak iki sebeple bu projede doğrudan Denise çipinden bu sinyalleri almayı istemiyorum:
1. Muhtemelen bu proje bittiğinde, eğer başarılı sonuçlar alırsak bazı arkadaşlar ortaya çıkan kartlardan edinmek isteyeceklerdir. Bu noktada Amiga'yı açıp içeride bir takım lehimler yapmak tercih edilmeyecek, Denis çipine kaçak kat çıkıp bir soket ile oradan sinyal almaya çalışsak bile bu elite bir çözüm olmayacaktı.
2. HDMI Sinyali üretirken bize kaynak video sinyali ile tam senkron, 27MHz veya tam katları olan bir clock gerekiyor. Normalde Amiga içerisinde bu clock veya tam katı mevcut değil. (O yıllarda kimse HDMI yada ITU-R BT.656 uyumluluğu öngörmemiş.

) Şimdi bu 27MHz sinyali bir kristal osilatör ile üretmek mümkün ancak Amiga'dan gelen video sinyaline senkron olmayacağı için kaymalar olacaktır. (Görüntü yavaş yavaş yukarı veya aşağı kayacaktır, vb...) Bunun çözümü ise bir PLL devresi ile gelen video sinyaline senkron olabilmek ancak bu başlı başına ayrı bir proje konusu.
Kullanacağımız muhtemel RGB video decoder çipinde ise, digital datanın yanı sıra LLC (Line Locked Clock) denilen bir çıkış mevcut. Eğer girişte bir video sinyali yoksa 27MHz civarı sabit bir sinyal üretiyor, eğer bir video sinyli algılanırsa, tam olarak bu sinyale locked bir 27MHz üretiliyor. Tam olarak bu sinyale locked şu demek oluyor. Bildiğiniz üzere PAL sinyalinin bir satırı taraması 64uS de gerçekleşir. Bu da tam 1728 adet 27MHz'lik clock darbesine tekabül ediyor. Yani ITU-R Bt.656 ya göre bir satır tam 1728 adet byte ile ifade ediliyor. (Bunun detayına projenin ilerleyen kısımlarında gireceğiz.) Bir eksik yada bir fazla bile olsa üreteceğimiz HDMI sinyali spesifikasyonlara uymayacaktır.
Buna karşın decoder çipi kullanmanın birkaç dezavantajı da yok değil:
1. Ek maliyet, daha büyük PCB alanı, daha çok komponent
2. Jenerasyon kaybı. (Kaymak gibi içeride dijital olarak mevcut olan sinyalin, analoğa dönüşmüş halini tekrar ditigize etmeye çalışıyoruz, şükür ki sinyal RGB, CVBS değil.)
3. DB23F konnektör bulmak günümüzde nerdeyse imkansız. Artık DB25F soketi kesip biçeceğiz, yada daha sofitike bir çözüm arayacağız.
Dağılmadan devam edelim. Bu projenin HDMI64'den farklılaştığı bir nokta daha var.
Bildiğim kadarı Amiga 500 tarafından desteklenen çözünürlükler, 320×256, 640×256, 640×512, 704×576
Bildiğiniz üzere PAL sinyali ise 720x576 çözünürlüğünde. Aslen Amiga 500'ün ürettiği tüm bu çözünürlükler kaba tabir ile PAL sinyal içerisine sığabiliyor.
Fakat burada bir nüans var, 640x512 ile 704x576 formatı interlaced. Bu ne demek oluyor?
Bildiğiniz yada hep duyduğumuz üzere PAL sinyalde önce tek satırlar, sonra çift satırlar taranır. Bu taramaların her birine bir frame denir. PAL sinyalinde saniyede 50 frame vardır. Ancak her frame ekranın mantıken sadece yarısını taramış olduğu için toplam refresh rate 25 olmuş olur. Şimdi eğer düşey çözünürlük örneğin 576'nın yarısından az ise, örneğin 288 yada buna sığdırılmış/ortalanmış bir 256 ise, aslında tek satır ile çift satır taramasında aynı bilgi gönderilir.
Örneğin bu çözünürlüklerde Amiga'nın 1. satırı, PAL sinyalin 1. ve 2. satırına denk gelir. PAL ilk framede 1,3,5... satırlarını gönderiyordu, bir sonraki framede ise 2,4,6... nolu satırları gönderiyordu, Amiga'nın 1. satırı PAL'in 1. ve 2. satırına denk geldiğinden, iki framede de Amiga'nın 1. satırı gönderilmiş oldu.
Bu sayade PAL'in 25Hz full screen refresh rate'i 50'ye çıkmış oldu. Ancak Amiga'nın 512 ve 576 çözünürlüklerinde bu durum geçerli değil. Zira her bir Amiga satırı tam olarak bir PAL satırına denk geliyor.
Bunun bizi ilgilendiren tarafı ne diyecek olursak, görüntüyü HDMI'a çevirirken aynı zamanda scanline effect vermek istiyoruz. Bunu nasıl yapıyoruz, Amiga'dan bir satır bilgi aldığımızda bunu iki kere HDMI'a gönderiyoruz. Yani scandoubling yapıyoruz. Aynı zamanda aslında interlaced>progressive çevirimi de yapmış oluyoruz. Bu işin bir yan ürünü olarak da eğer bu gönderdiğimiz iki satırdan birini diğerine oranla daha karanlık gönderirsek, suni bir scanline effect yaratmış oluyoruz.
İşte tam bu noktada eğer Amiga'dan interlaced bir görüntü geliyorsa, bir başka değiş ile tek ve çift satırlar farklı bilgi taşıyor ise, bu kurnazlığı yapamayacağız. Yapsak bile doğru bir iş yapmamış olacağız. Kısaca interlaced çözünürlüklerde scanline effect yapamayacağız.
Bu konuda son bir soru kalıyor aklımda, acaba gelen sinyalin interlaced olup olmadığını nasıl anlayacağız da scanline effect'i disable edeceğiz? Bunu henüz bilmiyorum. Muhtemelen bir switch ile kullanıcıya bırakabiliriz. Yani ya scanline effect yada interlaced görüntü seçimi yapılabilir.
Bu akşamlık bu kadar, henüz daha fazla ilerlemeim. Şimdilik kullanmayı düşündüğüm RGB video decoder çipi olan ADV7181C (10-Bit, Integrated, Multiformat SDTV/HDTV Video Decoder and RGB Graphics Digitizer ) entegresini inceliyorum. Neden bu çipi seçtim? Bulabildiğin en ucuz ve bulunabilen RGB decoder çipi bu idi.
Herkse sevgiler,
NOT1: Tüm bu yazdıkların PAL sinyal ve PAL Amiga için geçerli. Şu an için projenin odak noktasında PAL Amiga var. Proje sonunda NTSC kısmını ayrıca değerlendirebilirz, ama önceliğim değil.
NOT2: Amiga hakkında teknik bilgilerim çok kısıtlı. Zamanında sadece kullanıcı idim, dolayısı ile şu anda da sadece netten toparlayabiliğim bilgiler üzerine bu projeyi kurguluyorum. Eğer hatalarım varsa lütfen düzeltin.