Mendapat ralat emulator
P粉447495069
2023-09-01 20:53:31
<p>Saya telah cuba membuat kejuruteraan terbalik emulator GBA (https://gba.44670.org/) yang saya temui dalam talian dan menggunakan pengekstrak HTML untuk cuba menirunya. Saya mahu ia berfungsi di luar talian, jadi saya memuat turun semua skrip ke komputer saya dan menjalankannya di sana. Walau bagaimanapun, selepas ini, butang "Pilih Fail" tidak lagi muncul, digantikan dengan baris teks "Memuatkan, sila tunggu...". Menggali lebih dalam ke dalam kod saya mendapati bahawa ia mempunyai kaitan dengan WASM. Kodnya adalah seperti berikut: </p>
<pre class="brush:php;toolbar:false;"><div id="wasm-loading">
Muat turun sila tunggu...
</div>
<div id="select-rom"
<jenis input="fail"id="romFile" onchange="onFileSelected()"
<butang onclick="$id('romFile').klik()" id="btn-choose">Pilih Fail...</button>
</div></pre>
<p>Rujukan lain kepada WASM dalam kod adalah dalam apl fail .js.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 = Modul._emuGetSymbol(3)
imgFrameBuffer = Uint8ClampedArray(Module.HEAPU8.buffer).subarray(ptr, ptr + 240 * 160 * 4) baharu
idata = ImageData baharu(imgFrameBuffer, 240, 160)
isWasmReady = benar
document.getElementById('wasm-loading').hidden = benar
document.getElementById('select-rom').hidden = palsu
}</pre>
<p>Saya menjangkakan bahawa sebaik sahaja saya memuat turun skrip ia akan berfungsi seperti biasa. Maksud saya, ia masih mempunyai akses kepada skrip yang diperlukan, bukan? Saya telah cuba menyembunyikan teks dengan menukar pernyataan benar/salah dalam <code>document.getElementById('select-rom').hidden = false</code> dan sebaliknya, tetapi nampaknya tiada apa yang berkesan. Ada idea? Terima kasih terlebih dahulu. </p>
<p>(BTW, saya sedang mencari laluan fail dalam vscode.dev. Ia kelihatan seperti ini: <code><script src="/Scripts/44gba.js"></script> < ;skrip src="/Scripts /app.js"></script> <script src="/Scripts/localforage.js"></script> .js></script></code>
)</p>
Untuk menggunakan skrip untuk memastikan aplikasi anda tetap setempat, ingat dua perkara:
Iaitu, salin HTML yang sama yang anda dapat dalam respons (https://gba.44670.org/ ), yang akan mengekalkan struktur fail. Inilah yang saya dapat (
index.html
):Kemudian anda boleh melihat laluan skrip di mana anda akan mencipta fail:
Selain itu, anda perlu memuat turun fail WASM (651KB dimampatkan, 7.7MB tidak dimampatkan). Anda boleh memuat turun pakej zip di sini (anda boleh menemuinya dalam tab "Rangkaian" alat pembangun): https://gba.44670.org/build/44gba.wasm
Akhir sekali, muat turun semua fail yang diperlukan (anda juga boleh memuat turun ikon dan imej jika anda mahu, tetapi ia tidak diperlukan):
Anda akan mendapat struktur seperti ini:
Sekarang, alangkah baiknya jika anda boleh menyahaktifkan CORS daripada penyemak imbas anda. Tetapi jika tidak, anda perlu menyampaikannya dari pelayan HTTP tempatan. Satu pilihan ialah memasang pakej NPM: https://www.npmjs.com/package/http-server dan jalankan
npm install --global http-server
. Selepas itu, hanya navigasi ke direktori projek di terminal dan mulakan pelayan:Anda akan melihat skrin yang betul dan memuatkan ROM, kemudian anda selesai.
Editor: Menyelesaikan isu CORS tempatan dengan Hack yang mudah
Memandangkan saya tahu anda kini menggunakan ChromeOS dan secara teknikalnya tidak tahu cara mengendalikannya menggunakan Node, NPM dan HTTP-Server, saya membuat beberapa pengubahsuaian untuk anda dan meletakkan kandungan binari WASM secara terus build/44gba.js dan kembalikan kandungan binari pada fungsi readBinary untuk memintas isu CORS. Anda boleh melancarkan index.html secara langsung. Berikut ialah pautan kepada fail
build/44gba.js
build/44gba.js
baharu, cuma gantikan kandungannya dengan fail berikut: https://sendeyo.com/en/b02f94b524 Anda semua sihat. Berikut adalah perubahannya: