エミュレータエラーが発生する
P粉447495069
2023-09-01 20:53:31
<p>オンラインで見つけた GBA エミュレータ (https://gba.44670.org/) をリバース エンジニアリングし、HTML エクストラクターを使用して複製しようとしています。オフラインでも動作させたかったので、すべてのスクリプトをコンピューターにダウンロードし、そこで実行しました。ただし、これ以降、[ファイルを選択] ボタンは表示されなくなり、代わりに [読み込み中です。しばらくお待ちください...] というテキスト行が表示されます。コードを詳しく調べてみると、WASM と関係があることがわかりました。コードは次のとおりです。 </p>
<pre class="brush:php;toolbar:false;"><div id="wasm-loading">
読み込み中。。。待って下さい...
</div>
<div id="select-rom" 非表示>
<input type="file" id="romFile" onchange="onFileSelected()" hidden /></p>
<button onclick="$id('romFile').click()" id="btn-choose">ファイルを選択...</button>
</div></pre>
<p>コード内の WASM へのその他の参照は、.js ファイル app.js にあります。 </p>
<pre class="brush:php;toolbar:false;">function wasmReady() {
romBuffer = Module._emuGetSymbol(1)
var ptr = Module._emuGetSymbol(2)
wasmSaveBuf = Module.HEAPU8.subarray(ptr, ptr wasmSaveBufLen)
ptr = Module._emuGetSymbol(3)
imgFrameBuffer = new Uint8ClampedArray(Module.HEAPU8.buffer).subarray(ptr, ptr 240 * 160 * 4)
idata = 新しい ImageData(imgFrameBuffer, 240, 160)
isWasmReady = true
document.getElementById('wasm-loading').hidden = true
document.getElementById('select-rom').hidden = false
}</pre>
<p>スクリプトをダウンロードしたら、通常どおり動作するだろうと期待していました。つまり、必要なスクリプトにまだアクセスできるということですよね? <code>document.getElementById('select-rom').hidden = false</code> の true/false ステートメントを変更したり、その逆を行ったりしてテキストを非表示にしようとしましたが、何も機能しないようです。何か案は?前もって感謝します。 </p>
<p>(ところで、vscode.dev でファイル パスを探しています。次のようになります: <code><script src="/Scripts/44gba.js"></script> < ;script src="/Scripts /app.js"></script> <script src="/Scripts/localforage.js"></script> <script src=/Scripts/pako.min .js>
)</p>
スクリプトを使用してアプリケーションをローカルに維持するには、次の 2 つの点に注意してください:
つまり、応答で取得したものと同じ HTML (https://gba.44670.org/ ) をコピーします。これにより、ファイル構造が保持されます。これが私が得たものです(
リーリーindex.html
):これで、ファイルを作成するスクリプト パスが表示されます:
リーリーさらに、WASM ファイル (圧縮時 651KB、非圧縮時 7.7MB) をダウンロードする必要があります。 tarball はここからダウンロードできます (開発ツールの [ネットワーク] タブにあります): https://gba.44670.org/build/44gba.wasm
最後に、必要なファイルをすべてダウンロードします (必要に応じてアイコンや画像もダウンロードできますが、これらは必須ではありません):
次のような構造が得られます:
それでは、ブラウザから CORS を無効にしていただければ幸いです。ただし、そうでない場合は、ローカル HTTP サーバーからサービスを提供する必要があります。 1 つのオプションは、NPM パッケージをインストールすることです: https://www.npmjs.com/package/http-server、
リーリーnpm install --global http-server
を実行します。その後、ターミナルでプロジェクト ディレクトリに移動し、サーバーを起動するだけです:正しい画面が表示され、ROM がロードされたら完了です。
編集: 簡単なハックによるローカル CORS 問題の解決
あなたが現在 ChromeOS を使用していることはわかっていますが、それを処理するために Node、NPM、HTTP サーバーを使用する方法が技術的にはわからないため、いくつかの変更を加え、WASM バイナリ コンテンツを直接配置します。 build/ と入力します。 44gba.js を実行し、関数 readBinary でバイナリ コンテンツを返し、CORS 問題を回避します。 Index.html を直接起動できます。ここに新しい
リーリーbuild/44gba.js
ファイルへのリンクがあります。その内容を次のファイルに置き換えるだけです: https://sendeyo.com/en/b02f94b524 皆さんです良い 。変更点は次のとおりです: