3 puan yazan GN⁺ 2024-05-16 | 2 yorum | WhatsApp'ta paylaş
  • 1996'da piyasaya çıkan Nintendo 64 oyunları, emülasyon yerine PC'ye yerel portlar olarak yeniden derlenebiliyor; böylece ray tracing, ultrawide ve yüksek FPS gibi iyileştirmeler uygulanabiliyor
  • GitHub'dan Mr-Wiseguy'ın yayımladığı N64Recomp ve Zelda64Recomp temel araçlar; Zelda64Recomp, The Legend of Zelda: Majora's Mask oyununu PC'ye portluyor
  • Bu yöntem, 2020'de yayımlanan tamamen decompile edilmiş Super Mario 64 PC portundan farklı; ancak ikisi de PC'de yerel olarak çalışarak performansı ve efekt doğruluğunu artırabiliyor
  • Manuel decompile işlemi bir veya daha fazla kişinin yıllarca çalışmasını gerektirirken, N64Recomp N64 oyunlarını PC'de daha hızlı çalıştırılabilir biçime dönüştürmeyi amaçlayan bir yaklaşım
  • Çıktılar asset içermediği için oynamak için ROM gerekiyor; Banjo-Kazooie, Rocket Robot ve Superman 64 da çalıştırma örnekleri olarak anılıyor

N64 oyunlarını portlama yöntemindeki değişim

  • 2024'te bile Nintendo 64'ün orijinal donanımı ve oyunları meraklı topluluğundan düzenli ilgi görmeye devam ediyor
  • Gelişmiş N64 deneyiminin bir sonraki aşamasının emülasyon değil, yeniden derlenmiş PC portları olma olasılığı artıyor
  • GitHub'dan Mr-Wiseguy, N64Recomp ve Zelda64Recomp araçlarını yayımladı
    • N64Recomp, N64 oyunlarını PC'ye yerel portlar hâline getirmek için kullanılan temel araç
    • Zelda64Recomp, The Legend of Zelda: Majora's Mask oyununu PC'ye portluyor ve N64Recomp'un grafik ve kullanım kolaylığı iyileştirmelerini uyguluyor

PC portlarında mümkün olan iyileştirmeler

  • Yeniden derlenmiş PC portları, orijinal N64 oyunlarına PC ortamına özgü iyileştirmeler ekleyebiliyor
    • Gerçek ray tracing

      • Kare hızı sınırının kaldırılması
      • Uygun ultrawide desteği
      • PC'de beklenen grafik ve kullanım kolaylığı iyileştirmeleri
      • Majora's Mask, emülasyon yöntemi ile yerel PC yeniden derleme yönteminde ultrawide çalıştırma karşılaştırmasına örnek olarak ele alınıyor

Super Mario 64 PC portundan farkı

  • 2020'de yayımlanan, tamamen decompile edilmiş Super Mario 64 PC portu, ray tracing ve tüm modellerin değiştirilmesi gibi özellikleri mümkün kıldı; modlar bugün de devam ediyor
  • Yeniden derleme portları, SM64 PC portu gibi decompile portlardan üretim yöntemi açısından farklı
  • Her iki yöntem de PC'de yerel olarak çalışıyor; orijinal donanıma kıyasla performansı ve efekt doğruluğunu artırırken emülasyondan beklenen PC tarzı iyileştirmeleri sunabiliyor

N64Recomp neden önemli?

  • N64Recomp, yeniden derleme yaklaşımıyla emülasyonun ve yerel portların avantajlarını birlikte hedefleyen bir araç
  • Bir N64 oyununu manuel olarak decompile etmek, bir veya daha fazla kişinin yıllarca çalışmasını gerektiriyor
  • N64 oyunlarını daha verimli biçimde PC'de hızla çalıştırılabilir duruma getiren araçlar, koruma çalışmaları yürütenler için de faydalı olabilir

RT64 ve çalıştırma örnekleri

  • Dario, N64Recomp'ta ve bazı N64 emülatörlerinde kullanılan RT64 eklentisini geliştiren kişi
  • Dario'nun paylaşımına göre Wiseguy, tam decompile yapmadan N64 oyunlarının PC portlarını oluşturan bir araç üzerinde 1 yıl boyunca kapalı kapılar ardında çalıştı
  • Çıktılar asset içermiyor; oynamak için yalnızca ROM gerekiyor
  • Çalıştırma örnekleri olarak şu oyunlar anılıyor
    • Banjo-Kazooie
    • Rocket Robot
    • Superman 64

N64 ekosistemindeki diğer hareketler

  • N64 kütüphanesi ve orijinal donanım hayranlarına yönelik başka gelişmeler de sürüyor
  • Açık kaynaklı SummerCart64, mevcut konsollar için bir flash cart ve 64DD desteğini de hayata geçirdi
  • Gerçek donanımla uyumlu homebrew N64 oyunları ve ROM hack'leri de yayımlanmaya devam ediyor
    • 30 dövüşçü sunan Smash Remix
    • Mario 64 motorunu yeniden yazma projesi Peach's Fury

2 yorum

 
GN⁺ 2024-05-16
Hacker News yorumları
  • Bu aracı kullanmak için hâlâ önce ROM'u disassemble etmek ve yeniden derlenebilmesi için bolca açıklama eklemek gerekiyor
    Aracın kendisi harika, ama herhangi bir ROM'u neredeyse tek tıkla bağımsız bir çalıştırılabilir dosyaya dönüştürdüğü yönündeki abartı bana fazla görünüyor

    • Yine de N64'ün, PS2 veya Game Boy'un aksine, yalnızca 388 yayımlanmış oyunu var; bu yüzden yayımlanan tüm oyunları bu süreçten geçirip düzenlemek gerçekçi görünüyor
    • Bunun doğru olduğunu sanmıyorum
      Gönderideki videoda adı verilmeyen bir N64 oyunu yeniden derlenip sorunsuz çalıştırılıyordu ve ayrıca açıklama eklemeye de gerek yok gibi görünüyordu
    • O işi yalnızca bir kez yapıp bir yerde saklayarak paylaşmak yeterli
      ROM kelimenin tam anlamıyla salt okunurdur; dolayısıyla ROM'u verip native port elde etmek mümkün olur
    • Neden mutlaka önce ROM'u disassemble edip bolca açıklama eklemek gerektiğini anlamıyorum
      İkiliden ikiliye dönüşüm daha sezgisel olurdu; insan girdisine de gerek yok gibi
    • Sürecin tam olarak ne olduğunu ve en azından bir kısmının ChatGPT ile halledilip halledilemeyeceğini merak ediyorum
  • Gerçekten harika
    N64 decompilation için oluşturulan çeşitli temel araçlar başka sistemlerin decompilation paketlerine yayılıyor
    Yakın zamanda gördüğüm https://decomp.me/ birden çok sistem için ilgili SDK'lar ve donanım ön ayarlarıyla işbirlikçi decompilation desteği sunuyor
    Önümüzdeki birkaç yılda daha fazla sistemde bu akımın ortaya çıkacağını düşünüyorum

  • Bu çıktığında görmüştüm; ROM hacking alanını takip etmeyen biri olarak, bu yaklaşımın neden bu kadar geç ortaya çıktığını merak ediyorum
    Assembly komutlarını C'ye çevirip sonra yeniden derlemek, başta denenebilecek bariz bir yöntem gibi görünüyor; daha önce imkânsız olup şimdi mümkün kılan başka bir atılım mı vardı, merak ediyorum

    • N64'te modern GPU'lardan farklı bir GPU var ve grafikleri render etmek için o GPU gerekiyor
      GitHub deposuna hızlıca baktığımda, ışın izleme desteği için içeride rt64 kullanıyor gibi görünüyor(https://github.com/rt64/rt64)
      rt64, GPU'yu emüle etmek için ubershader tekniğini kullanıyor; şu mükemmel yazı da ubershader'ın ne olduğunu, neden gerektiğini ve ne kadar karmaşık olduğunu açıklıyor: https://dolphin-emu.org/blog/2017/07/30/ubershaders/
    • Diğer emülatörler sorunu genel amaçlı çözmeye çalışıyor, ama bu çözüm tamamen öyle değil
      Bir makine dilinden başka bir dile statik yeniden derleme yapmak, pratikte çok zor ile genel olarak imkânsız arasında bir yerde duran bir alan [1]
      Böyle bir yeniden derlemeyi düzgün yapmak için, yeniden derlemeyi kolaylaştıran ikili tarafında da yardım gerekir [2]; bunun üstüne çalışır hâle getirmek için yamalar da gerekir [3]
      Dinamik yeniden derlemede bu sorun yoktur; orijinal ikiliyi ve varlıkları, yani ROM'u verdiğinizde genelde emüle edilen yazılımı üretebilir
      Bu çözümün ne kadar genel amaçlı olduğu konusunda çok kafa karışıklığı var
      Yeniden derlemeyi veya port etmeyi çok daha kolaylaştıran iş yükü azaltımı açısından çok etkileyici ve değerli, ama geleneksel emülatörlere duyulan ihtiyacın yerini alamaz
      [1]: https://cs.stackexchange.com/questions/155511/why-is-static-...
      [2]: N64 oyun ikilileri, genel statik yeniden derlemeyi zorlaştıran çeşitli unsurlardan tesadüfen kaçındığı için bu yaklaşıma yardımcı olabilir; ama aslında emin değilim
      [3]: Majora's Mask yeniden derleme deposunda çalışması için elle hazırlanmış çok sayıda yama var: https://github.com/Mr-Wiseguy/Zelda64Recomp
    • Donanım emülasyonu genellikle paralel çalışan şeyleri cycle-accurate biçimde emüle etmeyi gerektirir; bu yüzden ROM içindeki programı işlemekten ibaret basit bir sorun değildir
    • Kendi kendini değiştiren kod ya da bunu zorlaştıran başka unsurlar kullanıp kullanmadığını merak ediyorum
  • Jamulator bunu NES için daha 2013'te yapmıştı, ama kimse pek umursamamış gibi görünüyor
    https://andrewkelley.me/post/jamulator.html
    Android'de Windows programları çalıştıran Winlator da var
    https://github.com/brunodev85/winlator
    Peki yazıda bağlantısı verilen YouTube videosunda yapay zeka sesi mi kullanılıyor?

    • En azından Mr WiseGuy umursuyor gibi görünüyor
      N64Recomp GitHub deposunda[0] şöyle yazıyor:
      "This is not the first project that uses static recompilation on game console binaries. A well known example is jamulator, which targets NES binaries."
      [0]: https://github.com/Mr-Wiseguy/N64Recomp
    • Jamulator'ın başarılı olamamasının nedeni, kartuşlarda çok fazla ek donanım bulunmasıydı
      Böyle bir durumda yeniden derleme işi sadece karmaşıklaştırır, pek büyük avantaj sağlamaz
      N64 sabit donanım olduğu için biraz daha kolay
      Yine de bu proje hâlâ RDP için emülasyon kullanıyor
      Üretilen RSP mikrokodunu nasıl ele aldıklarını bilmiyorum; belki de hiç ele almıyorlardır
      Birçok oyun sadece resmi kütüphaneyi kullanıyordu
    • Jamulator, çalışma biçimi dışında bir NES emülatörünün yapabileceklerinin ötesine geçemedi
      Jamulator Zelda için benzer iyileştirmelerle birlikte çıksaydı çok daha popüler olurdu
      İlgi, yöntemin kendisinden çok artık onunla neler yapılabileceğinden geliyor gibi
      Videonun anlatımını da sadece Nerrel adlı gerçek bir kişi yapmış
      Günümüzde yapay zeka seslerinin çok iyi hâle gelmesi, beklediğimiz şekilde konuşmayan birinden yapay zeka diye şüphelenmemize yol açıyor; bu da ilginç anlamda epey şaşırtıcı
    • Sadece Nerrel işte
      Anlatımı zaten çok düz olduğu için eskiden beri yapay zeka gibi duyuluyordu; bunun mizahla karışan hâlini seviyorum
  • Tüm oyun çalıştırılabilir dosyalarının WebAssembly gibi işletim sisteminden bağımsız olması güzel olurdu
    Örneğin GameAssembly gibi bir şey
    Artık yeni macOS'te 32 bit oyunlar oynanamıyor, Wine'da da 32 bit Windows oyunları çalışmıyor
    Wine/Crossover'da düzgün çalıştırılabilecek 64 bit .exe dosyası bulmak da neredeyse imkânsız

    • Oyunlarda CPU üzerinde çalışan kodun aslında daha küçük sorunlardan biri olduğu söylenebilir
      Konsollar söz konusu olduğunda, özellikle eski oyunlar ve platforma özel yapımlar çoğu zaman çok düşük seviyeli GPU uygulama ayrıntılarına dayanır
      Daha eski konsollarda, basit giriş/çıkış dışında önemli işler yapan ek özel çipler de vardı
      Örneğin SNES'in ses çipi, CPU ve GPU ile paralel olarak kendi küçük programını çalıştıran tamamen bağımsız bir CPU'ydu
      Elbette bundan sonraki tüm oyun geliştirmelerinde üst düzey bir sanal makineyi zorunlu kılabilirsiniz, ama konsol donanım özelliklerinin sabit olduğu düşünüldüğünde, en yeni grafiklerden yararlanmak isteyen oyunlar için rekabetçi olmayacaktır
    • Fikre katılıyorum ama x86_64 Linux'ta 32 bit Windows oyunlarını oldukça tatmin edici şekilde çalıştırdım
      Debian'da şunu çalıştırmam gerekiyordu
      dpkg --add-architecture i386 && apt-get update
      Sonra wine32 paketini kurmak yeterli
    • Oyunları taşınabilir yapmak için yalnızca taşınabilir makine kodu sağlamak yeterli değil
      Oyunların grafik API'si, pencere API'si, giriş API'si, ses API'si, disk API'si gibi çeşitli API'lere ihtiyacı var
      Bazen hile önleme veya kopya koruma işlevleri yüzünden çekirdek modülleri de gerekiyor
      Üzücü olan, açık kaynak işletim sistemlerinin geliştiricilerin kodu bir kez yazıp test ederek her yerde çalıştırabilmesi için ortak bir API kümesi sunmaya çalışmaması
      Flatpak var, ama anladığım kadarıyla bir API kümesi sunmaktan ziyade, Linux dağıtımını bir sanal makinenin içine, belirtim veya dokümantasyon olmadan paketlemeye daha yakın
      Çirkin ve Linux olmayan küçük işletim sistemleriyle de uyumlu değil
    • Mac'teki Wine'da, hatta Apple Silicon üzerinde bile 32 bit Windows oyunları çalıştırılabiliyordu
      M1 mini'de GTA IV çalıştırdım
      PlayOnMac'in kurduğu 32 bit Wine sürümünün içinde bir tür "32 on 64" emülasyonu var gibi, ama araması çok zor olduğu için gerçekte nasıl çalıştığını bilmiyorum
      Mac'in eski Mac programlarına kıyasla eski Windows programlarıyla daha uyumlu olması ilginç
    • JVM, Minecraft'ta bunu epey iyi başarıyor
      JVM olmasaydı Minecraft'ın Linux veya BSD türevlerini destekleyip desteklemeyeceği şüpheli
      JVM sürümü olmayan Bedrock Edition Windows'u, konsolları ve telefonları destekliyor; ama açıkça mümkün olmasına rağmen macOS'i desteklemiyor
  • Bunun sonunda Linux’ta da çalışıp, çok düşük donanımlı taşınabilir cihazlarda N64 oyunlarını kararlı biçimde oynatabilmesi güzel olurdu.
    N64, emülasyonunun zor olmasıyla kötü ünlü ama platform için native build yapılırsa performans sorunu ortadan kalkar.

    • N64Recomp üzerinden Linux’un native olarak destekleneceği neredeyse kesin: https://github.com/Mr-Wiseguy/N64Recomp
      Örneği burada görebilirsiniz: https://github.com/Mr-Wiseguy/Zelda64Recomp?tab=readme-ov-fi...
    • N64’ün emüle etmesinin zor olacağını beklemiyordum.
      N64 emülasyonunun ayrıntılarını pek bilmiyorum ama 2010’ların başından beri N64 emülatörlerini kusursuz çalıştırıyorum.
      Çoğunlukla büyük klasik oyunları oynadığım için daha niş oyunların performansını pek bilmiyorum.
    • Ubuntu PC’de bizzat denedim, gayet iyi çalışıyor.
      Yaklaşık bir saat oynadım, sorun yaşamadım.
    • Birkaç gün önce bu yazının bağlantı verdiği YouTube videosunu izledim; Linux desteğinden bahsediyordu ve özellikle Steam Deck’te de kullanılabilmesi gerektiğini söylüyordu.
    • Zaten Linux’ta çalışıyor.
      Kendim test ettim.
  • Bu, GoldenEye gibi oyunlarda oldukça faydalı olabilir.
    Garip joystick girişini varsaydığı için PC’de oynaması zor; diğer FPS’ler gibi normal fare davranışına sahip native bir GoldenEye portu olsa harika olurdu.

    • WASD ve fareyle nişan alma aslında o oyunla pek uyumlu değil.
      Nişan almanın mod değiştirme biçimi ve imlecin hareket edip tekrar merkeze dönmesi için geçen süre, oyunun eğlenceli kısmı.
      PC FPS’leri gibi koşarken serbest nişan mümkün olursa, senaryo bu varsayıma göre tasarlanmış olduğu için bence oyunu bozar.
      Nerede durup nişan alacağını seçmek ve nişan alırken soğukkanlı kalmak işin cazibesi.
      Yine de mod değiştirme korunup fare 1) çubuğun sağ-sol hareketi gibi Bond’u döndürse ve 2) yalnızca R’ye basılıp “nişan modu”ndayken imleci kontrol etse eğlenceli olabilir.
      Açıkçası shooter’ların hepsinin doğrudan Quake tarzı WASD+fare serbest nişana geçmesi beni üzüyor.
      Mod değiştirme biçimi GoldenEye’da sevdiğim o fiziksel hissi veriyor.
    • GoldenEye’a WASD+fare desteği ekleyen bir emülatör hack’i var ve iyi çalıştığını duydum.
      https://github.com/Graslu/1964GEPD/releases/tag/latest
    • Yine de hâlâ garip joystick’i beklemez mi?
    • Fare+WASD hack’i gerçekten iyi çalışıyor.
      Perfect Dark’ta da çalışıyor.
  • Oldukça ilginç; bunun MiSTer’da düzgün çalışan bir Conker sürümüne yol açıp açamayacağını merak ediyorum.
    Örneğin bunu decompile işlemine yardımcı olarak kullanıp birisi yamalı bir sürüm yapabilir mi?

  • Emülatöre kıyasla avantajının ne olduğunu merak ediyorum.
    Sonuçta önceden çevrilmiş bir emülatör biçimi değil mi?
    Bu yaklaşım geçmişte Bleem gibi şeylerde de vardı; performans açısından avantajlı olabilir ama modern PC’lerde iyi bir emülatör genelde gayet iyi çalışıyor.
    https://en.wikipedia.org/wiki/Bleem!

    • Bu projenin hedefiyle N64 emülasyonunun hedefi epey farklı.
      N64 emülatörlerinin hedefi genelde orijinal konsolun davranışını doğru biçimde yeniden üretmektir.
      Buna karşılık SM64, OOT, MM’i 60 fps, widescreen, texture pack, randomizer gibi çeşitli grafik iyileştirmeleriyle oynamak isteyen çok kişi var.
      Bu kişiler için bu oyunların aslında N64’te çalışmış olması fiilen önemli değil.
      Hatta daha çok bir engel.
      N64’ün grafik pipeline’ını emüle etmek zahmetli ve modern iyileştirmelerin önüne aktif biçimde geçiyor.
      Bu proje daha çok oyunun kendisini modern biçimde ele almaya ve N64 merkezli unsurları denklemden tamamen çıkarmaya odaklanmış görünüyor.
    • JIT emülasyonu takılmalar yaratabilir ama AOT muhtemelen yaratmaz.
      Günümüzde bilgisayarlar N64’ten çok daha hızlı olduğu için fark göze çarpmayabilir.
    • Videoda bu yöntem kullanıldığında emülasyona kıyasla çeşitli hataların ortadan kalktığı gösteriliyor.
    • Recompilation emülasyon değildir.
  • Genel emülatörler önceden mi derler, yoksa JIT mi kullanır?
    Değilse neden yapmadıklarını merak ediyorum.
    Bu yaklaşım, yani önceden derleme, büyük bir avantaja sahip gibi görünüyor.

    • Derleme ya da interpreter tekniği olarak aklınıza ne gelirse söyleyin, onu kullanan en az bir emülatör vardır.
    • 32 bit sonrası nesil emülatörlerin epey çoğu JIT recompilation kullanıyor.
      Ancak TeknoParrot böyle çalışmıyorsa önceden çeviri konusunda pek bilgim yok.
      Örneğin TeknoParrot ile ELF binary kullanan Linux arcade oyunlarını Windows’ta çalıştırabilirsiniz; ama mimari aynı olduğu için buna her iki durumda da emülasyon demezdim.
    • Emülasyon yöntemleri çok ama yorumlayarak yürütme muhtemelen en yaygın, en azından çok yaygın olanı.
      Yorumlayarak yürütme, makinenin çeşitli parçalarının durumunu temsil eden bir sanal makine yazıp, farklı doğruluk seviyeleriyle bu durumu değiştiren komutları çalıştırma yöntemidir.
 
lifeisliving 2024-05-18

Nerdlerin gücü adına! Emülatörlere JIT derleyici eklemenin ötesine geçildi; artık binary lifting ile C'ye dönüştürüp yeniden derlemek bile mümkün