2 puan yazan GN⁺ 2024-08-22 | 1 yorum | WhatsApp'ta paylaş
  • shadPS4, C++ ile yazılmış, Windows, Linux ve macOS'u destekleyen erken aşamadaki bir PlayStation 4 emülatörü
  • Depo yalnızca emülatör çekirdeğini içeriyor ve GUI sunmuyor; bu nedenle genel son kullanıcıların ayrı bir QtLauncher indirmesi gerekiyor
  • Şu anda Bloodborne, Dark Souls Remastered, Red Dead Redemption gibi bazı oyunları çalıştırabiliyor, ancak proje erken geliştirme aşamasında olduğu için tam bir deneyim beklenmemesi gerektiği açıkça belirtiliyor
  • Derleme süreci Docker, Windows, Linux ve macOS belgeleriyle anlatılıyor; macOS için macOS 26.0 veya üzeri gerekiyor ve Intel Mac desteklenmiyor
  • Bazı PS4 firmware modüllerinin sys_modules klasörüne yerleştirilmesi gerekiyor; oyunların düzgün çalışması için bu modüller yasal olarak sahip olunan bir PlayStation 4 konsolundan dump alınmış olmalı

shadPS4'ün niteliği ve hedef kullanıcıları

  • shadPS4, Windows, Linux ve macOS'ta çalışan, C++ ile yazılmış erken aşamada bir PlayStation 4 emülatörü
  • Bu depo emülatör çekirdeğini sağlar ve GUI içermez
  • GUI'ye ihtiyaç duyan son kullanıcılar QtLauncher kullanmalı
  • Sorun giderme veya kullanım bilgileri için Quickstart belgesine bakılabilir
  • Oyunların çalışma durumunu kontrol etmek için shadPS4 Game Compatibility sunuluyor

Mevcut çalışma durumu ve geliştirme yönü

  • shadPS4'ün erken geliştirme aşamasında olduğu ve kusursuz bir çalıştırma deneyimi beklemenin zor olduğu belirtiliyor
  • Şu anda çalıştırılabildiği belirtilen oyun örnekleri şunlar
  • Proje eğlence amaçlı başladı ve sınırlı boş zaman nedeniyle daha karmaşık oyunların çalıştırılması zaman alabilir
  • Geliştirme ekibi küçük ama düzenli güncellemeler yayımlamaya devam edeceğini söylüyor

Derleme ve platform gereksinimleri

  • Docker ve VSCode tabanlı container derlemeleri için Docker Build Instructions izlenmeli
  • Platforma özel derleme belgeleri mevcut
  • shadPS4'ü macOS'ta çalıştırmak için macOS 26.0 veya üzeri gerekiyor
  • Intel Mac desteklenmiyor

Çalıştırma biçimi ve giriş

  • Komut listesi ve her komutun ayrıntılı açıklaması --help çıktısında görülebilir
  • Sık kullanılan çalıştırma kalıpları şunlar
    • shadPS4 CUSA00001: kurulu oyun klasörleri listesinde CUSA00001 klasörünü bulup önyükler
    • shadPS4 --fullscreen true --config-clean CUSA00001: oyun argümanı varsayılan olarak sonda yer alır
    • shadPS4 -g CUSA00001 --fullscreen true --config-clean: -g ile oyun argümanı doğrudan belirtilebilir
    • shadPS4 /path/to/game.elf: PS4 ELF dosyasını doğrudan önyükler
    • shadPS4 CUSA00001 -- -flag1 -flag2: bayrakları oyunun çalıştırılabilir dosyasının argv'sine iletir
  • Test, debug ve issue bildirme için Debugging documentation incelenebilir
  • Klavye kısayolları FPS sayacı, video debug bilgisi, tam ekran, RenderDoc capture ve ekran görüntüsü almayı destekler
  • Xbox ve DualShock kontrolcüleri ek yapılandırma olmadan çalışır
  • Klavye ve fare girdileri ayarlar menüsündeki Controller düğmesinden özelleştirilebilir
    • Özel eşlemeler oyun bazında kaydedilir
    • Her eşleme için en fazla 3 tuş, fare düğmesi ve joystick girdisine eşlenen fare hareketleri gibi seçenekler desteklenir

Firmware dosyaları ve yasal koşullar

  • shadPS4 bazı PlayStation 4 firmware dosyalarını yükleyebilir
  • Desteklenen firmware modülleri shadPS4'ün sys_modules klasörüne yerleştirilmelidir
  • Desteklenen modüller arasında libSceAudiodec.sprx, libSceFont.sprx, libSceJpegDec.sprx, libSceJson.sprx, libSceLibcInternal.sprx, libScePngEnc.sprx, libSceRtc.sprx, libSceXml.sprx ve diğerleri yer alır
  • Bu modüller oyunların düzgün çalışması için gereklidir
  • Firmware modülleri yasal olarak sahip olunan bir PlayStation 4 konsolundan dump alınmalıdır

Katkı ve referans projeler

  • Katkıda bulunmak için CONTRIBUTING.md okunup PR açılabilir
  • Proje, aşağıdaki ekip ve projelere teşekkür ediyor
    • Panda3DS: PS4 binary'lerindeki x64 kodunu native çalıştırırken ortaya çıkan sorunları anlamaya ve çözmeye yardımcı oldu
    • fpPS4: PS4 işletim sistemi ve kütüphanelerinin karmaşık kısımlarını anlamaya yardımcı oldu
    • yuzu: shadPS4'ün shader derleyicisi, yuzu'nun Hades derleyicisini temel aldı
    • felix86: x86-64 → RISC-V Linux kullanıcı alanı emülatörü
    • emudev.org: yok olma riski taşıyan donanımların belgelendirilmesi, emülasyonu, simülasyonu ve yeniden uygulanmasıyla ilgilenen kişilerin ağı
  • Lisansı GPL-2.0 license

1 yorum

 
GN⁺ 2024-08-22
Hacker News yorumları
  • Gerçekten merak ediyorum: içeride PCSX2 gibi bir emülatöre mi daha yakın, yoksa Wine gibi bir uyumluluk katmanına mı?
    PS4 neredeyse bir x86 bilgisayarsa, zor kısmın büyük bölümü PS4'ün sistem/grafik API'lerini uygulamak gibi görünüyor. Yoksa x86 PC ile PS4 arasında ele alınması gereken büyük donanım farkları da var mı?

    • PS4 ile PC arasındaki çeşitli farklar için Marcan'ın 2016 CCC sunumuna bakabilirsiniz: https://youtu.be/QMiubC6LdTA
    • Konsollarda tüm shader'lar ilgili platform için önceden derlenmiş olarak dağıtıldığı için, shader yeniden derleyicisine dayalı bir yapı olması gerekir
      En azından sırf bu açıdan bile Wine'ın yaptığından epey daha fazla iş yapıyor
    • Çoğu PS4 emülatörü Wine ile aynı şekilde çalışır
  • Bloodborne'da karakter ekranına ulaşan ilk PS4 emülatörü gibi görünüyor

  • Emülatörlerin nasıl tasarlandığını merak ediyorum. Öğrenmek için iyi kaynaklar var mı?

    • Hangi donanımı emüle etmek istediğinize göre çok değişir. Genelde iki tür vardır: tam sistem emülasyonu ve sistem API emülasyonu
      İlki, NES gibi hedef sistemin CPU'sunu komut yorumlayıcısı yöntemiyle emüle eden kod yazmaktır. İkincisi, Wine gibi hedef sistemin API'lerini yeniden uygulamaktır. Hedef sistem farklı bir CPU mimarisi kullanıyorsa PS3'te olduğu gibi bir JIT derleyici gerekebilir
      Modern konsol emülatörlerinin çoğu ikincisine daha yakındır; çünkü modern konsolların çalışma biçimi PC'lere benzer, işletim sistemi çekirdeği ve uygulamalar için kullanıcı modu kütüphaneleri vardır
      İkincisi de kendi içinde ikiye ayrılır. Biri kullanıcı modu kütüphanelerini emüle etme yöntemi, diğeri ise konsol çekirdeğini yeniden uygulayıp konsolun kendi sistem kütüphanelerini yeniden kullanma yöntemidir
    • https://rylev.github.io/DMG-01/public/book/ bu kaynak okunması güzel bir kaynak
    • Öğrenmek istiyorsanız, belgeleri iyi olan ve görece basit bir eski Game Boy emülatörü gibi şeylerden başlamak iyi olabilir
    • YouTube'da javidx9, yani OneLoneCoder, sıfırdan NES emülatörü yazdığı oldukça iyi bir seri hazırlamıştı: https://www.youtube.com/watch?v=nViZg02IMQo&list=PLrOv9FMX8x...
    • Game Boy emülatörü yazmaya dair internette çok sayıda kaynak var ve mimarisi takip etmesi yeterince basit
      İstediğiniz dille oradan başlamanızı öneririm
  • Önceki denemeleri veya ön çalışmaları ve bu projenin neden farklı olduğunu gösteren bir tasarım belgesi ya da kaynak var mı?

  • Takip etmeye değer ilginç bir proje gibi görünüyor. Sony'nin şu anda taşınabilir seçeneklerinin eksik olduğunu düşününce, Steam Deck üzerinde nasıl çalışacağını merak ediyorum

    • Bence kesinlikle imkânsız. Steam Deck bazı PS3 emülasyonu oyunlarında fena olmayan kare hızları verse de[0], insanların PS4'te gerçekten isteyeceği oyunları çalıştırması mümkün değil
      0: https://www.reddit.com/r/SteamDeck/comments/wodw8x/i_tested_...
    • Uyumluluk katmanı yöntemiyle giderse Switch emülatöründen daha iyi bile çalışabilir
  • Bu, Gnm/Gnmx için bir DXVK muadili yaptıkları anlamına mı geliyor?[0]
    [0] https://en.wikipedia.org/wiki/PlayStation_4_system_software#...

  • Bloodborne'un en güncel ilerleme durumu bu. Çoğu kişinin beklediği şey muhtemelen bu:
    Bu geliştiricinin YouTube'u: https://www.youtube.com/watch?v=wC6s0avpQRE
    Sony'nin bu S sınıfı kültürel öneme sahip oyunu hâlâ neredeyse kötü niyetli biçimde kendi hâline bırakması nasıl bir şey, anlamıyorum. PS6 çıkış oyunu olarak kullanmak için mi bekliyorlar?

    • Sony oyunlarını her zaman sevmişimdir ama Sony'nin PS4'e geriye dönük uyumluluk koymayıp kimsenin ilgilenmediğini iddia etmesini, sonra da eski oyunları abonelik tabanlı PSNOW hizmetiyle oynatmasını unutamıyorum
      Bazıları indirilebiliyor ama diğerleri yalnızca streaming ile oynanabiliyor; yani PS2 oyunu oynamak için iyi bir internet bağlantısı gerekiyor. Akıl alır gibi değil
      Eski oyunları oynamaya yönelik talep her zaman olacak; bu yüzden böyle emülatörler var
  • Günümüzde modern konsollar fiilen küçültülmüş PC sistemlerine dönüştükçe emülasyon geliştirme daha kolaylaşıyor mu merak ediyorum

    • Önceki nesilleri pek bilmiyorum ama PS4 emülasyonunun nasıl mümkün olduğunu açıklayabilirim. İlk adım, konsolun oyunları nasıl çalıştırdığını anlamaktır
      Neyse ki PS4 hack'lendi ve neredeyse tüm dosyalar ile bilgiler çözülüp dump edildi. Resmî PS4 SDK'sı da sızdırıldı
      Artık konsolun oyunları nasıl çalıştırdığını biliyoruz; sonraki adım bu bilgiyi kullanarak oyunu konsol dışında çalıştırmak. PS4 sistemi, FreeBSD'nin değiştirilmiş bir sürümü olduğu için çalışma biçimi PC'ye çok benzer. PS4 çalıştırılabilir dosyası sadece özel bir ELF dosyasıdır
      Bu yüzden PS4 oyununu konsol dışında çalıştırmak için oyun yürütülebilir dosyasını doğrudan eşlemek ve gerekli sembolleri bir şekilde sağlamak gerekir. Örneğin bunları doğrudan uygulayarak ya da PS4 kütüphanelerini yeniden kullanarak
    • İnternet sayesinde aynı işi yapan insanlara ulaşmak daha kolay ve bu tür sistemlerin nasıl çalıştığını çözmek için hesaplama gücü de daha iyi hâle geldi
      Yine de bilgiye erişilebilirliğin büyük bir etken olduğunu düşünüyorum
    • Ortak komut kümesi mimarisi kesinlikle yardımcı oluyor. Çünkü konsol işletim sistemini başlatmadan oyun imajını doğrudan çalıştırmanın ve altına gereken bağımlılıkları yerleştirmenin yolunu açıyor. Yani WINE'ın yaptığına benzer bir yöntem
      Genel olarak sektörde ikili çeviri de çok gelişti. Rosetta 2 bunun bir örneği. İkiliyi başka bir host ortamına taşımakta kullanılabilecek bir araç daha olmuş oluyor
    • Doğru. Nesiller arasında mimari bir ölçüde benzerse daha hızlı olur
  • Birkaç yıl önce Spine adlı başka bir PS4 emülatörünün de ilgi gördüğünü hatırlıyorum. O projeye ne oldu merak ediyorum
    https://github.com/devofspine/spine
    Kaynak kod yok, yalnızca binary var