HeadlinesBriefing HeadlinesBriefing 11 languages

Show HN: PS2 games statically recompiled to WebAssembly

Hacker News ·

🇬🇧 English

Play Station 2 games run in the browser without an emulator. The game's Emotion Engine machine code is translated ahead of time into C++, compiled to WebAssembly, and linked against a reimplementation of the PS2's operating system and hardware that draws with WebGPU.

This is the sibling of psp-web-recomp and follows the same method. The first title brought up this way is Gran Turismo 4, chosen because it is one of the most demanding games on the system: it leans on both vector units, on exact floating point behaviour for its replays and license tests, and on graphics tricks that read rendered images back as palettes. It plays from boot through the opening movie, the menus and races, with music and sound effects, and saves to a memory card kept in the browser. A race runs at full speed, 50 frames per second for this PAL release, in Chrome on a laptop's integrated GPU at twice the PS2's resolution.

God of War II followed through the same scripts. It needed no game-specific code, but it found two bugs that Gran Turismo 4 had never triggered, one in the recompiler and one in the vector unit timing, and a few missing pieces of the PS2's input/output processor. It now plays from the menus through its cutscenes into combat, and holds 60 frames per second in heavy combat at the PS2's resolution in Chrome.

No game data is included here. You bring a disc image of a game you own, and the scripts in this repository turn it into a web page on your machine.

View original article →


🇸🇦 العربية

RUNNING PS2 GAMES IN BROWSER VIA WEBASSEMBLY RECOMPILATION

PLAY STATION 2 GAMES RUN IN THE BROWSER WITHOUT AN EMULATOR. THE GAME'S EMOTION ENGINE MACHINE CODE IS TRANSLATED AHEAD OF TIME INTO C++, COMPILED TO WEBASSEMBLY, AND LINKED AGAINST A REIMPLEMENTATION OF THE PS2'S OPERATING SYSTEM AND HARDWARE THAT DRAWS WITH WEBGPU.

THIS IS THE SIBLING OF PSP-WEB-RECOMP AND FOLLOWS THE SAME METHOD. THE FIRST TITLE BROUGHT UP THIS WAY IS GRAN TURISMO 4, CHOSEN BECAUSE IT IS ONE OF THE MOST DEMANDING GAMES ON THE SYSTEM: IT LEANS ON BOTH VECTOR UNITS, ON EXACT FLOATING POINT BEHAVIOUR FOR ITS REPLAYS AND LICENSE TESTS, AND ON GRAPHICS TRICKS THAT READ RENDERED IMAGES BACK AS PALETTES. IT PLAYS FROM BOOT THROUGH THE OPENING MOVIE, THE MENUS AND RACES, WITH MUSIC AND SOUND EFFECTS, AND SAVES TO A MEMORY CARD KEPT IN THE BROWSER. A RACE RUNS AT FULL SPEED, 50 FRAMES PER SECOND FOR THIS PAL RELEASE, IN CHROME ON A LAPTOP'S INTEGRATED GPU AT TWICE THE PS2'S RESOLUTION.

GOD OF WAR II FOLLOWED THROUGH THE SAME SCRIPTS. IT NEEDED NO GAME-SPECIFIC CODE, BUT IT FOUND TWO BUGS THAT GRAN TURISMO 4 HAD NEVER TRIGGERED, ONE IN THE RECOMPILER AND ONE IN THE VECTOR UNIT TIMING, AND A FEW MISSING PIECES OF THE PS2'S INPUT/OUTPUT PROCESSOR. IT NOW PLAYS FROM THE MENUS THROUGH ITS CUTSCENES INTO COMBAT, AND HOLDS 60 FRAMES PER SECOND IN HEAVY COMBAT AT THE PS2'S RESOLUTION IN CHROME.

NO GAME DATA IS INCLUDED HERE. YOU BRING A DISC IMAGE OF A GAME YOU OWN, AND THE SCRIPTS IN THIS REPOSITORY TURN IT INTO A WEB PAGE ON YOUR MACHINE.

KEY ENTITIES: COMPANIES: GITHUB, CHROME

HOW DOES PS2-TO-WEBASSEMBLY RECOMPILATION WORK?

THE EERECOMP READS THE GAME'S EXECUTABLE, FOLLOWS ITS CONTROL FLOW TO FIND FUNCTIONS, AND EMITS C++ FOR THEM IN UNITS OF 16 KIB OF GUEST CODE, PRESERVING R5900 QUIRKS LIKE 128-BIT REGISTERS, BRANCH DELAY SLOTS, AND THE PS2'S NON-IEEE FLOATING POINT UNIT. JUMPS BECOME TAIL CALLS AND THREAD SWITCHES UNWIND THE HOST STACK, SO NO PER-GUEST-THREAD STACK IS NEEDED.

العربية version →


🇧🇩 বাংলা

PS2 খেল WebAssembly পুনর্সংকলনের মাধ্যমে ব্রাউজারে চলে

Play Station 2 খেল এমুলেটর ছাড়াই ব্রাউজারে চলে। খেলের Emotion Engine মেশিন কোড আগে থেকে C++ তে অনূদিত হয়, WebAssembly এ সংকলিত হয় এবং PS2 এর অপারেটিং সিস্টেম ও হার্ডওয়ারের পুনর্নির্মাণের সাথে সংযুক্ত হয় যা WebGPU দিয়ে আঁকে।

এটি psp-web-recomp এর ভাই এবং একই পদ্ধতি অনুসরণ করে। প্রথম শীর্ষক যা এভাবে তৈরি করা হয়েছে হলো Gran Turismo 4, বাছাই করা হয়েছে কারণ এটি সিস্টেমের সবচেয়ে চাপসিদ্ধ খেলগুলোর এক: এটি দুইটি ভেক্টর ইকার উপর নির্ভর করে, তার পুনরাবৃত্তি ও লাইসেন্স পরীক্ষার জন্য সঠিক ফ্লোটিং পয়েন্ট আচরণের উপর, এবং রেন্ডার করা ছবিগুলোকে প্যালেট হিসেবে পড়ার গ্রাফিক্স ট্রিক্সের উপর। এটি বুট থেকে শুরু হয়ে উদঘাটনের সিনেমা, মেন্যু ও দৌড় পর্যন্ত চলে, সঙ্গীত ও ধ্বনি প্রভাবের সাথে, এবং ব্রাউজারে রাখা মেমোরি কার্ডে সংরক্ষণ করে। একটি দৌড় পূর্ণ গতিতে, এই PAL রিলিজের জন্য 50 ফ্রেম প্রতি সেকেন্ড, Chrome এ একটি ল্যাপটপের একীকৃত GPU তে PS2 এর দ্বিগুন রেজোলিউশনে চলে।

God of War II একই স্ক্রিপ্টের মাধ্যমে অনুসরণ করে। এটির কোনো খেল-বিশিষ্ট কোডের প্রয়োজন ছিল না, কিন্তু এটি দুটি বাগ খুঁজে পেয়েছে যা Gran Turismo 4 কখনো ট্রিগার করেনি, একটি পুনর্সংকলনকারকার মধ্যে এবং একটি ভেক্টর ইকার টাইমিং এ, এবং PS2 এর ইনপুট/আউটপুট প্রসেসরের কয়েকটি অনুপস্থিত অংশ। এটি এখন মেন্যু থেকে চলে যায় তার কাটসিনের মধ্যে যুদ্ধে, এবং Chrome এ PS2 এর রেজোলিউশনে ভারী যুদ্ধে 60 ফ্রেম প্রতি সেকেন্ড ধরে রাখে।

এখানে কোনো খেলের ডেটা অন্তর্ভুক্ত নয়। আপনি আপনার একটি খেলের ডিস্ক ইমেজ আনুন, এবং এই রিপোজিটরিতে স্ক্রিপ্টগুলো আপনার মেশিনে একটি ওয়েব পেজে রূপান্তর করবে।

প্রমুক সংস্থান: কোম্পানি: GitHub, Chrome

PS2 থেকে WebAssembly পুনর্সংকলন কিভাবে কাজ করে?

eerecomp খেলের এক্সিকিউটেবল ফাইলটি পড়ে, তার নিয়ন্ত্রণ প্রবাহ অনুসরণ করে ফাংশনগুলো খুঁজে বের করে, এবং 16 KiB অতিথি কোডের ইকাই হিসেবে তাদের জন্য C++ উত্পাদন করে, R5900 এর বৈশিষ্ট্যগুলো যেমন 128-বিট রেজিস্টার, ব্রাঞ্চ ডেলে স্লট, এবং PS2 এর নন-IEEE ফ্লোটিং পয়েন্ট ইকা রক্ষা করে। ঝুকেগুলো টেল কল হয়ে যায় এবং থ্রেড সুইচ হোস্ট স্ট্যাক আনwind করে, তাই প্রতি-অতিথি-থ্রেড স্ট্যাকের প্রয়োজন হয় না।

বাংলা version →


🇪🇸 Español

Los juegos de PS2 se ejecutan en el navegador mediante recompilación WebAssembly

Los juegos de Play Station 2 se ejecutan en el navegador sin emulador. El código de máquina del Emotion Engine del juego se traduce anticipadamente a C++, se compila a WebAssembly y se enlaza contra una reimplementación del sistema operativo y hardware de la PS2 que dibuja con WebGPU.

Este es el hermano de psp-web-recomp y sigue el mismo método. El primer título que se ejecuta de esta manera es Gran Turismo 4, elegido porque es uno de los juegos más exigentes del sistema: aplica tanto unidades vectoriales, comportamiento de punto flotante exacto para sus repeticiones y pruebas de licencia, y trucos gráficos que leen imágenes renderizadas como paletas. Juega desde el inicio hasta la película de apertura, menús y carreras, con música y efectos de sonido, y guarda en una tarjeta de memoria mantenida en el navegador. Una carrera se ejecuta a velocidad completa, 50 cuadros por segundo para esta versión PAL, en Chrome con una GPU integrada de portátil a dos veces la resolución de la PS2.

God of War II siguió a través de los mismos scripts. No necesitó código específico del juego, pero encontró dos errores que Gran Turismo 4 nunca activó, uno en el recompilador y otro en el temporizado de la unidad vectorial, y unas pocas partes faltantes del procesador de entrada/salida de la PS2. Ahora juega desde los menús hasta sus escenas cinéticas y combate, y mantiene 60 cuadros por segundo en combate pesado a la resolución de la PS2 en Chrome.

No se incluye ningún dato de juego en este lugar. Usted trae una imagen de disco de un juego que posee, y los scripts de este repositorio la convierten en una página web en su máquina.

Entidades clave: Empresas: GitHub, Chrome

¿Cómo funciona la recompilación de PS2 a WebAssembly?

El eerecomp lee el ejecutable del juego, sigue su flujo de control para encontrar funciones, y emite C++ para ellas en unidades de 16 KiB de código huésped, preservando las rarezas del R5900 como registradores de 128 bits, slots de retardos de salto y la unidad de punto flotante no IEEE de la PS2. Los saltos se convierten en llamadas colas y los cambios de hilo desenrollan la pila del host, por lo que no se necesita una pila por hilo huésped.

Español version →


🇫🇷 Français

Les jeux PS2 fonctionnent dans le navigateur via la recompilation WebAssembly

Les jeux de Play Station 2 fonctionnent dans le navigateur sans émulateur. Le code machine du Emotion Engine du jeu est traduit à l'avance en C++, compilé en WebAssembly, et lié contre une réimplémentation du système d'exploitation et du matériel de la PS2 qui dessine avec WebGPU.

C'est le frère de psp-web-recomp et suit la même méthode. Le premier titre apparu de cette manière est Gran Turismo 4, choisi parce que c'est l'un des jeux les plus exigeants du système : il s'appuie sur les deux unités vectorielles, sur un comportement exact en virgule flottante pour ses rediffusions et tests de licence, et sur des effets graphiques qui lisent les images renderisées comme palettes. Il joue depuis le boot jusqu'au film d'ouverture, les menus et les courses, avec musique et effets sonores, et sauvegarde sur une carte mémoire conservée dans le navigateur. Une course tourne à vitesse maximale, 50 images par seconde pour cette version PAL, dans Chrome sur un GPU intégré d'ordinateur portable à deux fois la résolution de la PS2.

God of War II est venu ensuite par les mêmes scripts. Il n'a pas besoin de code spécifique au jeu, mais il a trouvé deux bugs que Gran Turismo 4 n'av jamais déclenchés, un dans le recompilateur et un dans la temporisation de l'unité vectorielle, et quelques pièces manquantes du procesateur d'entrée/sortie de la PS2. Il joue maintenant des menus à ses scènes coupées vers le combat, et maintient 60 images par seconde dans un combat intense à la résolution de la PS2 dans Chrome.

Aucune donnée de jeu n'est incluse ici. Vous apportez une image disque d'un jeu que vous possédez, et les scripts de ce dépôt la transforment en une page web sur votre machine.

Entités clés : Entreprises : GitHub, Chrome

FAQ : Comment fonctionne la recompilation PS2 vers WebAssembly ?

L'eerecomp lit l'exécutable du jeu, suit son flux de contrôle pour trouver les fonctions, et émet du C++ pour celles-ci en unités de 16 KiB de code invité, préservant les particularités du R5900 comme les registres de 128 bits, les slots de retard de branchement, et l'unité à virgule flottante non IEEE de la PS2. Les sauts deviennent des appels queue et les bascules de thread déroulent la pile hôte, donc pas de pile par thread invité n'est nécessaire.

Comment fonctionne la recompilation PS2 vers WebAssembly ?

L'eerecomp lit l'exécutable du jeu, suit son flux de contrôle pour trouver les fonctions, et émet du C++ pour celles-ci en unités de 16 KiB de code invité, préservant les particularités du R5900 comme les registres de 128 bits, les slots de retard de branchement, et l'unité à virgule flottante non IEEE de la PS2. Les sauts deviennent des appels queue et les bascules de thread déroulent la pile hôte, donc pas de pile par thread invité n'est nécessaire.

Français version →


🇮🇳 हिन्दी

PS2 खेल WebAssembly पुनर्संकलन के माध्यम से ब्राउज़र में चलते हैं

Play Station 2 खेल एमुलेटर के बिना ब्राउज़र में चलते हैं। खेल के Emotion Engine मशीन कोड को समय पहले C++ में अनुवादित किया जाता है, WebAssembly में कंपाइल किया जाता है, और PS2 के संचालन तंत्र और हार्डवेयर के पुनर्निर्माण से जोड़ा जाता है जो WebGPU से चित्र खींचता है।

यह psp-web-recomp का भाई है और इसी तरीके का पालन करता है। पहला शीर्षक जो इस तरीके से प्राप्त किया गया है, वह Gran Turismo 4 है, चुना गया क्योंकि यह सिस्टम के सबसे कठिन खेलों में से एक है: यह दोनों सदिश इकाइयों पर निर्भर करता है, अपने पुनरावृत्तियों और लाइसेंस परीक्षणों के लिए ठीक-ठीक फ्लोटिंग पॉइंट व्यवहार पर, और रेंडर की गई छवियों को पैलेट के रूप में पढ़ने वाले ग्राफिक्स तर्कों पर। यह बूट से शुरू होकर खोलने वाली फिल्म, मेन्यू और दौड़ों तक चलता है, संगीत और प्रभावों के साथ, और ब्राउज़र में रखे गए मेमोरी कार्ड में सेव करता है। एक दौड़ पूरी गति से, इस PAL रिलीज़ के लिए 50 फ्रेम प्रति सेकंड, Chrome में एक लैपटॉप के एकीकृत GPU पर, PS2 के दोगुनी रिज़ॉल्यूशन पर चलती है।

God of War II इसी स्क्रिप्ट के माध्यम से अगला आया। इसमें खेल-विशिष्ट कोड की आवश्यकता नहीं थी, लेकिन इसने दो बग खोजे जिन्हें Gran Turismo 4 ने कभी ट्रिगर नहीं किया, एक पुनर्संकलनकर्ता में और एक सदिश इकाई टाइमिंग में, और PS2 के इनपुट/आउटपुट प्रोसेसर के कुछ अभावित हिस्से। अब यह मेन्यू से चलकर अपनी कटसीनों और युद्ध में जाता है, और Chrome में PS2 के रिज़ॉल्यूशन पर भारी युद्ध में 60 फ्रेम प्रति सेकंड बनाए रखता है।

यहाँ कोई खेल डेटा शामिल नहीं है। आप अपने स्वामित्व में किसी खेल की डिस्क छवि लाएं, और इस रिपॉजिटरी में स्क्रिप्ट इसे आपके मशीन पर एक वेब पेज में बदल देंगे।

प्रमुख इकाइयाँ: कंपनियाँ: GitHub, Chrome

PS2 से WebAssembly पुनर्संकलन कैसे काम करता है?

eerecomp खेल के निष्पादनयोग्य फाइल को पढ़ता है, उसके नियंत्रण प्रवाह को फलकों की खोजने के लिए अनुसरण करता है, और 16 KiB अतिथि कोड की इकाइयों में उनके लिए C++ उत्पन्न करता है, जिसमें R5900 की विशेषताएँ जैसे 128-बिट रजिस्टर, शाखा देरी स्लॉट, और PS2 की गैर-IEEE फ्लोटिंग पॉइंट इकाई बनाए रखता है। झूँटें पूंजीकरण कॉल्स में बदल जाती हैं और थ्रेड बदलाव मेजबान स्टैक अनवाइंड हो जाता है, ताकि प्रति-अतिथि-थ्रेड स्टैक की आवश्यकता न हो।

हिन्दी version →


🇮🇩 Bahasa Indonesia

Permainan PS2 berjalan di browser melalui recompilation WebAssembly

Permainan Play Station 2 berjalan di browser tanpa emulator. Kode mesin Emotion Engine permainan diterjemahkan ke C++, dikompilasi ke WebAssembly, dan dihubungkan terhadap reimplementation sistem operasi dan perangkat keras PS2 yang menggambarkan dengan WebGPU.

Ini adalah saudara dari psp-web-recomp dan mengikuti metode yang sama. Judul pertama yang muncul dengan cara ini adalah Gran Turismo 4, dipilih karena ini adalah salah satu permainan yang paling menuntut di sistem: ini bergantung pada kedua unit vektor, pada perilaku floating point yang tepat untuk replay dan tes lisensi, dan pada trik grafik yang membaca gambar yang di-render kembali sebagai palet. Ini bermain dari boot melalui film pembuka, menu dan balapan, dengan musik dan efek suara, dan menyimpan ke kartu memori yang disimpan di browser. Satu balapan berjalan dengan kecepatan penuh, 50 frame per detik untuk rilis PAL ini, di Chrome pada GPU terintegrasi laptop dua kali resolusi PS2.

God of War II mengikuti melalui skrip yang sama. Tidak membutuhkan code spesifik game, tetapi menemukan dua bug yang tidak pernah dipicu oleh Gran Turismo 4, satu di recompiler dan satu di timing unit vektor, dan beberapa bagian yang hilang dari processor input/output PS2. Sekarang bermain dari menu melalui cutscene ke pertarungan, dan mempertahankan 60 frame per detik dalam pertarungan berat pada resolusi PS2 di Chrome.

Tidak ada data permainan yang disertakan di sini. Anda membawa gambar disk dari permainan yang Anda miliki, dan skrip di repositori ini mengubahnya menjadi halaman web di mesin Anda.

Entitas kunci: Perusahaan: GitHub,

Bagaimana recompilation PS2 ke WebAssembly bekerja?

eerecomp membaca file eksekusi permainan, mengikuti alirannya untuk menemukan fungsi, dan menghasilkan C++ untuk mereka dalam unit 16 KiB dari code tamu, mempertahankan keanehan R5900 seperti register 128-bit, slot delay cabang, dan unit floating point non-IEEE PS2. Lompatan menjadi panggilan ekor dan pertukaran thread mengurai stack host, sehingga tidak perlu stack per thread tamu.

Bahasa Indonesia version →


🇯🇵 日本語

PS2ゲームがWebAssembly再コンパイルでブラウザで動作

Play Station 2のゲームがエミュレータなしでブラウザで動作します。ゲームのEmotion Engineの機械語コードは事前にC++に翻訳され、WebAssemblyにコンパイルされ、WebGPUで描画するPS2のOSとHardwareの再実装と链接されます。

これはpsp-web-recompの兄弟であり、同じ方法に従います。この方法で最初に立ち上げられたタイトルはGran Turismo 4で、システムで最も要求の高いゲームの一つであるため選ばれました:これはベクトル Unitsの両方依存し、リプレイとライセンステスト用の正確な浮動小数点挙動に依存し、レンダリングされた画像をパレットとして読み込むグラフィックトリックに依存します。これはブートから openingsムービー、menu、レースまで音楽と効果音付きで動作し、ブラウザ内に保持されたメモリーカードにセーブします。レースはPAL版このリリースで毎秒50フレームのフル速度で、ChromeでノートPCの内蔵GPUでPS2の2倍の解像度で動作します。

God of War IIが同じスクリプトでfollowしました。ゲーム固有のコードは不要でしたGran Turismo 4がトリガーしたことがない2つのバグ、再コンパイラ内のものとベクトルUnitのtimingのもの、およびPS2のI/Oプロセッサのいくつかの欠落部分を見つけました。-now menuからカットシーン、戦闘まで動作し、ChromeでPS2解像度の重い戦闘中も毎秒60フレームを維持します。

ここにはゲームデータは含まれていません。所有するゲームのディスクイメージを持ち込み、このリポジトリのスクリプトがmachineryでウェブページに変換します。

主要エンティティ:会社:GitHub, Chrome

FAQ:PS2からWebAssemblyへの再コンパイルはどのように機能しますか?

eerecompはゲームの実行可能ファイルを読み、制御フローに従って関数を Finds、16 KiBのゲストコード単位でC++を生成し、R5900の特徴である128ビットレジスタ、ブランチディレイスロット、PS2の非IEEE浮動小数点Unitを保持します。ジャンプはテールコールになり、スレッドスイッチはホストスタックを巻き戻すので、ゲストスレッドごとのスタックは不要です。

PS2からWebAssemblyへの再コンパイルはどのように機能しますか?

eerecompはゲームの実行可能ファイルを読み、制御フローに従って関数を Finds、16 KiBのゲストコード単位でC++を生成し、R5900の特徴である128ビットレジスタ、ブランチディレイスロット、PS2の非IEEE浮動小数点Unitを保持します。ジャンプはテールコールになり、スレッドスイッチはホストスタックを巻き戻すので、ゲストスレッドごとのスタックは不要です。

日本語 version →


🇧🇷 Português

Jogos de PS2 rodam no navegador via recompilação WebAssembly

Jogos de Play Station 2 rodam no navegador sem emulador. O código máquina do Emotion Engine do jogo é traduzido antecipadamente para C++, compilado para WebAssembly, e vinculado contra uma reimplementation do sistema operacional e hardware da PS2 que desenha com WebGPU.

Este é o irmão do psp-web-recomp e segue o mesmo método. O primeiro título trazido dessa maneira é Gran Turismo 4, escolhido porque é um dos jogos mais exigentes do sistema: apoia-se em ambas as unidades vetoriais, no comportamento de ponto flutuante exato para suas retransmissões e testes de licença, e em truques gráficos que leem imagens renderizadas como paletas. Joga desde o boot até o filme de abertura, os menus e as corridas, com música e efeitos sonoros, e salva em um cartão de memória mantido no navegador. Uma corrida corre em velocidade máxima, 50 quadros por segundo para esta versão PAL, no Chrome em uma GPU integrada de laptop com o dobro da resolução da PS2.

God of War II seguiu pelos mesmos scripts. Não precisou de código específico do jogo, mas encontrou dois bugs que Gran Turismo 4 nunca acionou, um no recompilador e outro no timing da unidade vetorial, e algumas partes faltantes do processador de entrada/saída da PS2. Agora joga dos menus pelas suas cenas cinematográficas para o combate, e mantém 60 quadros por segundo em combate pesado na resolução da PS2 no Chrome.

Nenhum dado de jogo está incluído aqui. Você traz uma imagem de disco de um jogo que possui, e os scripts deste repositório a transformam em uma página web na sua máquina.

Entidades-chave: Empresas: GitHub, Chrome

Como funciona a recompilação de PS2 para WebAssembly?

O eerecomp lê o executável do jogo, segue seu fluxo de controle para encontrar funções, e emite C++ para elas em unidades de 16 KiB de código convidado, preservando as particularidades do R5900 como registradores de 128 bits, slots de atraso de ramo, e a unidade de ponto flutuante não IEEE da PS2. Saltos tornam-se chamadas de cauda e as trocas de thread desenrolam a pilha host, então nenhuma pilha por thread convidado é necessária.

Português version →


🇷🇺 Русский

Игры PS2 запускаются в браузере через рекомпиляцию WebAssembly

Игры Play Station 2 запускаются в браузере без эмулятора. Код машины Emotion Engine игры переводится заранее в C++, компилируется в WebAssembly и связывается с переimplementsацией операционной системы и железа PS2, которая рисует через WebGPU.

Это сестра psp-web-recomp и следует тому же методу. Первый титул, запущенный таким образом, — Gran Turismo 4, выбран потому что это один из самых требовательных игр на системе: он опирается на оба векторных блока, на точное поведение с плавающей точкой для своих повторов и тестов на лицензию, и на графические трюки, которые читают отрендеренные изображения как палитры. Игра запускается с загрузки через начальный фильм, меню и гонки, с музыкой и звуковыми эффектами, и сохраняется на карту памяти, хранящуюся в браузере. Гонка идет на полной скорости, 50 кадров в секунду для этого PAL-релиза, в Chrome на встроенной GPU ноутбука вдвое выше разрешения PS2.

God of War II последовал по тем же скриптам. Ему не понадобился конкретный код игры, но он нашел два бага, которых Gran Turismo 4 никогда не вызывал, один в рекомпиляторе и один во времени векторного блока, и несколько недостающих частей процессора ввода/вывода PS2. Теперь он играет от меню через свои кат-сцены в бой и удерживает 60 кадров в секунду в тяжелом бою на разрешении PS2 в Chrome.

Никакие данные игр не включены здесь. Вы приносите образ диска игры, которую owns, и скрипты этого репозитория превращают его на вашем компьютере в веб-страницу.

Ключевые сущности: Компании: GitHub, Chrome

Как работает рекомпиляция PS2 в WebAssembly?

eerecomp читает играбельный файл, следует его потоку управления для поиска функций, и генерирует C++ для них в блоках по 16 KiB гостевого кода, сохраняя особенности R5900, такие как 128-битные регистры, слоты задержки ветвления и не-IEEE блок плавающей точки PS2. Прыжки становятся хвостовыми вызовами, а переключения потоков раскручивают стек хоста, так что стек на гостевой поток не нужен.

Русский version →


🇨🇳 简体中文

PS2游戏通过WebAssembly重编译在浏览器中运行

Play Station 2 游戏无需模拟器即可在浏览器中运行。游戏的 Emotion Engine 机器代码被提前翻译为 C++,再编译为 WebAssembly,并与重新实现的 PS2 操作系统和硬件(使用 WebGPU 渲染)进行链接。

这是 psp-web-recomp 的姊妹项目,采用相同方法。首个以此方式运行的游戏是 Gran Turismo 4,因其是系统上最 demanding 的游戏之一:依赖两个向量单元、精确的浮点行为以支持回放和驾照测试,以及将渲染图像作为调色板读取的图形技巧。游戏可从启动画面、开场电影、菜单到比赛完整运行,包含音乐和音效,并保存至浏览器中的记忆卡。在 Chrome 浏览器中,使用笔记本电脑集成显卡,以 PAL 制式 50 帧每秒全速运行,分辨率为 PS2 的两倍。

God of War II 随后通过相同脚本实现运行。它无需特定游戏代码,但发现了两个 Gran Turismo 4 未触发的 bug:一个在重编译器中,另一个在向量单元时序中,以及 PS2 输入/输出处理器的若干缺失部分。目前可从菜单运行至过场动画和战斗,在 Chrome 中以 PS2 分辨率在激烈战斗中维持 60 帧每秒。

此处不包含游戏数据。您需提供自己拥有的游戏光盘镜像,仓库中的脚本将其在您的机器上转换为网页。

关键实体:公司:GitHub, Chrome

FAQ:PS2 到 WebAssembly 重编译如何工作?

eerecomp 读取游戏可执行文件,追踪控制流以识别函数,并以 16 KiB 客户代码为单位为其生成 C++,保留 R5900 的特性,如 128 位寄存器、分支延迟槽和 PS2 的非 IEEE 浮点单元。跳转变为尾调用,线程切换展开主机栈,因此无需每个客户线程的独立栈。

PS2 到 WebAssembly 重编译如何工作?

eerecomp 读取游戏可执行文件,追踪控制流以识别函数,并以 16 KiB 客户代码为单位为其生成 C++,保留 R5900 的特性,如 128 位寄存器、分支延迟槽和 PS2 的非 IEEE 浮点单元。跳转变为尾调用,线程切换展开主机栈,因此无需每个客户线程的独立栈。

简体中文 version →