Mendapat ralat emulator
P粉447495069
P粉447495069 2023-09-01 20:53:31
0
1
649

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:

Muat turun sila tunggu...
Pilih Fail...

Rujukan lain kepada WASM dalam kod adalah dalam apl fail .js.js:

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 }

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 document.getElementById('select-rom').hidden = false dan sebaliknya, tetapi nampaknya tiada apa yang berkesan. Ada idea? Terima kasih terlebih dahulu.

(BTW, saya sedang mencari laluan fail dalam vscode.dev. Ia kelihatan seperti ini: < ;skrip src="/Scripts /app.js"> .js> )

P粉447495069
P粉447495069

membalas semua (1)
P粉550823577

Untuk menggunakan skrip untuk memastikan aplikasi anda tetap setempat, ingat dua perkara:

  1. Skrip telah ditulis dan akan mencari sumber (js, css, gambar) dalam struktur direktori Apl semasa
  2. Permintaan dan pembacaan fail disekat oleh CORS dalam kebanyakan penyemak imbas melainkan anda melumpuhkan semakan pra-penerbangan CORS.

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):

        44VBA 

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-serverdan jalankannpm install --global http-server. Selepas itu, hanya navigasi ke direktori projek di terminal dan mulakan pelayan:

npx http-server ./ --port 4000

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 failbuild/44gba.jsbuild/44gba.jsbaharu, cuma gantikan kandungannya dengan fail berikut:https://sendeyo.com/en/b02f94b524Anda semua sihat. Berikut adalah perubahannya:

const wasmData = `0061 736d 0100 0000 01c9 011e 6001 7f00 6002 7f7f 0060 0000 6001 7f01 7f60 037f ... ... ... ... ... ... ... ... 0a00 41c0 8106 0b04 7064 6202`; // other codes ... readBinary = filename=>{ var ret = new Uint8Array(wasmData); return ret; /* var ret = read_(filename, true); if (!ret.buffer) { ret = new Uint8Array(ret) } return ret */ } // other codes ...
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!