Emülatör olmadan tarayıcıda çalışan PlayStation 2 oyunları. Oyunun Emotion Engine makine kodu önceden C++ diline çevrildi, WebAssembly'de derlendi ve PS2'nin WebGPU ile çalışan işletim sistemi ve donanımının yeniden uygulanmasına bağlandı.
Gelişmenin Ayrıntıları ve Kapsamı
Bu, psp-web-recomp'un kardeşidir ve aynı yöntemi izler. Bu şekilde gündeme getirilen ilk oyun, sistemdeki en zorlu oyunlardan biri olduğu için seçilen Gran Turismo 4'tür: her iki vektör birimine, tekrarlar ve lisans testleri için tam kayan nokta davranışına ve işlenmiş görüntüleri palet olarak geri okuyan grafik hilelerine dayanır. Önyüklemeden açılış filmine, menülere ve yarışlara kadar müzik ve ses efektleriyle oynatılır ve tarayıcıda saklanan bir hafıza kartına kaydedilir. Bu PAL sürümü için bir yarış tam hızda, saniyede 50 kare olarak, Chrome'da bir dizüstü bilgisayarın entegre GPU'sunda PS2'nin iki katı çözünürlükte yürütülüyor; yukarıdaki kayıt bu şekilde yapıldı.
God of War II de aynı senaryoyu takip etti. Oyuna özel bir koda ihtiyacı yoktu ancak Gran Turismo 4'ün hiç tetiklemediği iki hata buldu; biri yeniden derleyicide, diğeri vektör birimi zamanlamasında ve PS2'nin giriş/çıkış işlemcisinde birkaç eksik parça. Artık menülerden ara sahnelere geçerek çatışmaya giriyor ve ağır savaşta PS2'nin Chrome çözünürlüğünde saniyede 60 kare tutuyor. İki katı çözünürlükte, dizüstü bilgisayarın entegre GPU'su tarafından sınırlanan 48 ila 60 arasında çalışır.
“Teknoloji ekosisteminde ölçeklenebilirlik ve otomasyon süreçleri, kullanıcı deneyimi ile doğrudan birleştiğinde katma değer üretiyor.”
Burada hiçbir oyun verisi yer almamaktadır. Sahip olduğunuz bir oyunun disk imajını getiriyorsunuz ve bu depodaki scriptler onu makinenizde bir web sayfasına dönüştürüyor.
Yeniden derleme. eerecomp oyunun çalıştırılabilir dosyasını okur, işlevleri bulmak için kontrol akışını takip eder ve bunlar için 16 KiB konuk kodu birimlerinde C++ yayar. Çıktı, R5900'ün tuhaflıklarını koruyor: 128 bitlik kayıtlar ve bunlar üzerinde çalışan multimedya talimatları, dal gecikme yuvaları, PS2'nin IEEE'den farklı sonsuzlukları veya denormalleri ve turları olmayan kayan nokta birimi ve yardımcı işlemci olarak kullanılan vektör birimi 0. Birimler arasındaki geçişler kuyruk çağrılarına dönüşür ve bir iş parçacığı anahtarı ana bilgisayar yığınını çözer ve konuk adresinde devam eder, böylece oluşturulan kodun hiçbir zaman konuk iş parçacığı başına bir yığına ihtiyacı olmaz.
Küçük bir PS2 çekirdeği. İşletim sisteminin EE tarafı yüksek seviyeli emülasyonla yanıtlanır: iş parçacıkları, semaforlar, DMA denetleyicisi için kesme işleyicileri ve dikey boşluk, alarmlar ve ana CPU'yu G/Ç işlemcisine bağlayan SIF kanalı. G/Ç işlemcisi oyunun kendi IRX modüllerini, ses sürücüsünü, disk akış kodunu ve diskte gelen denetleyici ve hafıza kartı sürücülerini R3000 CPU'sunun bir yorumlayıcısında çalıştırırken, IOP çekirdeği ve bu modüllerin çağırdığı kitaplıklar C++'da yeniden uygulanır. Disk, HTTP Aralığı istekleri üzerinden okunur, böylece yalnızca yürütülebilir dosya önden indirilir.
Vektör birimleri. Bir PS2 oyununun 3D çalışmasının çoğu, oyunun vektör birimi 1'e yüklediği mikro programlarda gerçekleşir. Oyunlar, kodlarını bunların etrafında planladıkları için MAC'in ardışık düzen gecikmeleri, durum ve klip bayrakları modellenerek ve PS2'nin özel değerler için kayan kurallarla çalışırlar: sonsuzluklar veya NaN'ler yok, denormaller sıfıra ayarlandı ve taşma en büyük kayan noktaya kenetlendi. Aritmetiğin kendisi ana bilgisayara aittir, dolayısıyla bir sonuç son bitinde konsolunkinden farklı olabilir; konsol, ana bilgisayarın yuvarlandığı yeri keser ve çarpanı kesin değildir. Bir test çalıştırması sırasında görülen mikro programlar önceden SIMD C++'a derlenir; Sayfanın ilk kez buluştuğu tüm sayfalar, program başına birkaç milisaniye süren bir WebAssembly modülüne anında çevrilir.
Grafikler. Grafik Sentezleyicinin 4 MB'lık video belleği, yerel swizzled düzenlerinde GPU üzerinde yaşar ve çizim, WebGPU hesaplama gölgelendiricileri tarafından yapılır: üçgenler döşemelere gruplanır ve dokulandırma, paletler, alfa harmanlama, derinlik ve hedef alfa testleri için GS'nin kendi kurallarıyla rasterleştirilir. Her şey GS belleğinde kaldığı için, bir dokuya dönüştürülen veya bir çerçeve arabelleğini palet olarak yeniden yorumlayan efektler, konsolda olduğu gibi çalışır. Dahili çözünürlük yerel çözünürlüğün bir, iki veya üç katı olabilir. Aynı GS'nin yazılım rasterleştiricisi, GPU çıkışının karşılaştırıldığı referans olarak kalır.
Konular. Emülasyon bir çalışanda çalışır, vektör birimi 1'in konsolda paralel olarak çalıştığı şekilde kendine ait bir çalışanı vardır ve GS komutları bir halka arabelleği üzerinden WebGPU cihazının sahibi olan sayfa iş parçacığına gider.
Ses ve filmler. SPU2, 48 ADPCM sesi, ADSR zarfı ve müzik için kullanılan akışlı DMA oyunlarıyla yeniden uygulanır ve çıkışı, paylaşılan bellek aracılığıyla bir AudioWorklet'e gider. Filmlerin kodu, PS2'nin MPEG-2 kod çözücüsü olan IPU'nun bir uygulamasıyla çözülür.
Recep Usta OS — Sistem & Mühendislik Değerlendirmesi
Altyapı ve Verimlilik Perspektifi: Show HN: PS2 games statically recompiled to WebAssembly haberi incelendiğinde; kurumsal dijitalleşme ve otomasyon süreçlerinin modern yazılım mimarileriyle nasıl güçlendirildiği açıkça görülüyor. Ağ güvenliği, yüksek erişilebilirlik ve mikroservis tabanlı veri senkronizasyonu bu tarz operasyonlarda başarının anahtarıdır.
Kullanıcı odaklı dijital çözümlerin güvenli altyapılarla desteklenmesi, hem yerel pazarda hem de uluslararası genişlemede sistem sürdürülebilirliğini sağlamlaştırmaktadır.