...
"emulation" ...
"conversion" ...
"Amiga-Atari ST ailesi" ...
Sevgili Alcofribas’ın mesajında havada uçuşan bir sürü kavram var! Bu konuda birşeyler kaleme almadan önce, hepimizin aynı şeyden bahsettiğini garantilemek amacıyla, birbiri içine girmiş kavramların açıklanması gerektiğini düşünüyorum. Bu bağlamda; öncelikle konuyu (bilgisayar teknolojileri ile sınırlamadan) genel olarak ele almaya çalışacağım, ardından da kavramları retro odaklı bir projeyle örneklemeye çalışacağım. Zira bu konu,
"Atari ST’den Amiga’ya port kolaydır, tersi zordur" türü genellemelere açık olamayacak kadar karmaşık ve tecrübe gerektiren bir iştir.
Önce kavramlar:
Çok basite indirgersek, bir sistemin yazılım ve/veya donanımsal işlevselliğinin, başka bir sistem üzerinde;
-
benzer işlevsellikte çalışacak şekilde
yüzeysel olarak modellenmesine "
benzetim" (simulation),
-
aynı işlevsellikte çalışacak şekilde
birebir modellenmesine ise "
öykünme" (emulation) denir.
Aralarındaki en büyük fark;
"modelleme hassasiyeti"dir (modeling precision).
Bu iki kavramı netleştirdiğimize göre, artık konuyu akademik seviyeden aşağı çekerek, basit bir örnekle retro muhabbetimize başlayabiliriz
Diyelim ki hepimizin çok sevdiği Sinclair ZX Spectrum klasiği olan "Knight Lore" oyununu Amiga 500’de oynanır hale getirmek istiyoruz. Eğer "Knight Lore"un grafiklerini Spectrum’dan ripleyip Amiga’ya aktarırsak ve Z80’de yazılan orijinal kodu disassemble ettikten sonra benzer işlevsellikte çalışacak kodu M68000 için tekrar yazarsak, yukarıdaki tanımlara göre simulation yapmış oluyoruz.
Bu kadar basit mi? Maalesef değil
Zira, iki sistem arasındaki donanımsal farklılıklar yüzünden "Knight Lore"u simüle edebilmek için hem grafikler üzerinde hem de kodun işlevselliği üzerinde çok önemli değişiklikler yapmak gerekiyor. Örneğin; 2 renkte çizilmiş 12 kare güneş/ay animasyonunu Amiga’ya aktardığımızda, başta
"bit sırası" (bit order),
"bit derinliği" (bit depth) ve
"renk değerleri" (colour values) olmak üzere bazı teknik farklılıklar ile karşılaşıyoruz. Diyelim ki bu farklılıkları bu işe özel yazdığımız bir
"importer" kodu ile giderdik. Bu kez de karşımıza bu grafiğin Amiga’da ekrana basılabilmesi sorunu çıkıyor. Z80’de çalışan orijinal kodun adresleme yönteminin aksine, Amiga’nın ekran adresleme sistemine uygun bir kodun yazılması gerekiyor. Bir diğer deyişle; fonksiyon girdi ve çıktılarının değişmesi sebebiyle, benzer işi yapan fonksiyonun sil baştan yazılması gerekiyor… Karmaşık mı? Biraz öyle. - İşte, bu paragrafta anlattığımız işlerin tümüne
"taşıma/aktarma" (port) ya da
"çevirim" (conversion) deniyor. Port/Convert etmek demek, aslında simulation sürecinin en önemli parçası demek. Sanılanın aksine, simulation'dan farklı/bağımsız bir iş değil!
Peki, biz bu yolu seçmeyip emulation yapmaya karar verseydik, o zaman ne olacaktı? Yanıt basit; "Knight Lore"un kaset kopyasını birebir (1 byte’ını bile değiştirmeden) Amiga'da çalıştırabilmek için, Spectrum’un tüm donanımsal mimarisini ve ROM’unu M68000 kodu ile cycle hassasiyetinde modellememiz gerekecekti. Bu durumda da Amiga’nın 7.14 MHz’lik M68000 işlemcisi emulation sırasında gerçek Spectrum performansını yakalayamayacağı için, oyunumuz muhtemelen 1-2 frame hızında oynayacaktı. - Kabaca özetlersek; toplam performansı birbirine yakın donanımlar arasında emulation yerine conversion’ın tercih edilmesinin asıl sebebi, aktarılan oyunda mümkün olan en iyi frame rate’i yakalama çabasıdır.
Gelelim Alcofribas’ın mesajındaki diğer iki kavrama;
"Amiga" ve
"Atari ST" ile kastedilen modeller hangileridir? Biliyoruz ki, hem donanımsal açıdan hem de uyumluluk açısından Amiga 500 v1.2/v1.3, Amiga 600 ve Amiga 1200 arasında dağlar kadar fark var. Amiga ile neyi kastediyoruz? Aynı soruyu
"Atari ST" kavramı için de sormalıyız. Blitter desteği olmayan 520ST/1040ST'den mi, yoksa 1989 yılında piyasaya blitter desteği ile sürülen 520ST
E/1040ST
E’den mi söz ediyoruz? Sakın
"Aman canım, ne önemi var!" demeyin, çünkü Alcofribas’ın sorularını net olarak yanıtlayabilmemiz için bu parametreyi de çok iyi bilmemiz lazım. Sadece ST ve ST
E modelleri arasındaki donanımsal farklılık bile conversion süresini +/- 3 ay değiştirebilecek kadar önem taşıyor. (Verdiğim 3 ay örneği tecrübe ile sabittir, laf olsun diye söylemedim)
Kusura bakmayın, biraz uzun bir yanıt oldu ama, sizin de göreceğiniz üzere Alcofribas’ın sorusu
"ondan buna çevirim kolaydır, şundan buna çevirim zordur" türü kestirme yanıtlar verilemeyecek kadar karmaşık bir süreç…
Son olarak; böylesine önemli bir konu başlığını
araladığı için Alcofribas'a teşekkürler