From 42a1135567fee0f8e40c63a60387079d3270892c Mon Sep 17 00:00:00 2001 From: Raphael Amorim Date: Mon, 11 Sep 2023 11:15:27 +0200 Subject: [PATCH] fix cartridge problem on web --- docs/index.js | 6 +-- src/gameboy.rs | 1 + src/mbc/mbc1.rs | 1 + src/mbc/mbc3.rs | 32 +++++++++++++ src/mbc/mod.rs | 3 +- src/mmu/mmu.rs | 1 + src/mmu/mod.rs | 1 - src/mmu/rtc.rs | 105 ------------------------------------------ src/screen/desktop.rs | 8 ++++ src/screen/web.rs | 1 + 10 files changed, 49 insertions(+), 110 deletions(-) delete mode 100644 src/mmu/rtc.rs diff --git a/docs/index.js b/docs/index.js index 8de413b..d4f4e96 100644 --- a/docs/index.js +++ b/docs/index.js @@ -16,7 +16,7 @@ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"__wbg_addEventListener_b2c53f6c8c23bac8\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_addEventListener_b2c53f6c8c23bac8),\n/* harmony export */ \"__wbg_appendChild_d21bac021b5bbfde\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_appendChild_d21bac021b5bbfde),\n/* harmony export */ \"__wbg_call_33d7bcddbbfa394a\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_call_33d7bcddbbfa394a),\n/* harmony export */ \"__wbg_call_65af9f665ab6ade5\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_call_65af9f665ab6ade5),\n/* harmony export */ \"__wbg_createElement_28fc3740fb11defb\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_createElement_28fc3740fb11defb),\n/* harmony export */ \"__wbg_document_15b2e504fb1556d6\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_document_15b2e504fb1556d6),\n/* harmony export */ \"__wbg_error_09919627ac0992f5\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_error_09919627ac0992f5),\n/* harmony export */ \"__wbg_getContext_efe7e95b72348104\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_getContext_efe7e95b72348104),\n/* harmony export */ \"__wbg_getElementById_927eae2597d26692\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_getElementById_927eae2597d26692),\n/* harmony export */ \"__wbg_globalThis_3348936ac49df00a\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_globalThis_3348936ac49df00a),\n/* harmony export */ \"__wbg_global_67175caf56f55ca9\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_global_67175caf56f55ca9),\n/* harmony export */ \"__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773),\n/* harmony export */ \"__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b),\n/* harmony export */ \"__wbg_instanceof_Window_42f092928baaee84\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_instanceof_Window_42f092928baaee84),\n/* harmony export */ \"__wbg_keyCode_3075e448a1211124\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_keyCode_3075e448a1211124),\n/* harmony export */ \"__wbg_log_5f8746597fe47331\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_log_5f8746597fe47331),\n/* harmony export */ \"__wbg_new_52205195aa880fc2\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_new_52205195aa880fc2),\n/* harmony export */ \"__wbg_new_693216e109162396\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_new_693216e109162396),\n/* harmony export */ \"__wbg_newnoargs_971e9a5abe185139\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_newnoargs_971e9a5abe185139),\n/* harmony export */ \"__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed),\n/* harmony export */ \"__wbg_putImageData_b6835d76d1cb45dd\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_putImageData_b6835d76d1cb45dd),\n/* harmony export */ \"__wbg_requestAnimationFrame_9e5ccef32fec2b99\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_requestAnimationFrame_9e5ccef32fec2b99),\n/* harmony export */ \"__wbg_resolve_0107b3a501450ba0\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_resolve_0107b3a501450ba0),\n/* harmony export */ \"__wbg_self_fd00a1ef86d1b2ed\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_self_fd00a1ef86d1b2ed),\n/* harmony export */ \"__wbg_setheight_d1ec9b4faad45a42\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_setheight_d1ec9b4faad45a42),\n/* harmony export */ \"__wbg_setwidth_79da97dd2684789d\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_setwidth_79da97dd2684789d),\n/* harmony export */ \"__wbg_stack_0ddaca5d1abfb52f\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_stack_0ddaca5d1abfb52f),\n/* harmony export */ \"__wbg_then_18da6e5453572fc8\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_then_18da6e5453572fc8),\n/* harmony export */ \"__wbg_window_6f6e346d8bbd61d7\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_window_6f6e346d8bbd61d7),\n/* harmony export */ \"__wbindgen_cb_drop\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_cb_drop),\n/* harmony export */ \"__wbindgen_closure_wrapper671\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_closure_wrapper671),\n/* harmony export */ \"__wbindgen_closure_wrapper673\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_closure_wrapper673),\n/* harmony export */ \"__wbindgen_closure_wrapper856\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_closure_wrapper856),\n/* harmony export */ \"__wbindgen_debug_string\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_debug_string),\n/* harmony export */ \"__wbindgen_is_undefined\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_is_undefined),\n/* harmony export */ \"__wbindgen_object_clone_ref\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_object_clone_ref),\n/* harmony export */ \"__wbindgen_object_drop_ref\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_object_drop_ref),\n/* harmony export */ \"__wbindgen_throw\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_throw),\n/* harmony export */ \"render\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.render),\n/* harmony export */ \"start\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.start)\n/* harmony export */ });\n/* harmony import */ var _index_bg_wasm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index_bg.wasm */ \"./gameboy/index_bg.wasm\");\n/* harmony import */ var _index_bg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index_bg.js */ \"./gameboy/index_bg.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_index_bg_js__WEBPACK_IMPORTED_MODULE_0__, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_1__]);\n([_index_bg_js__WEBPACK_IMPORTED_MODULE_0__, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_1__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n_index_bg_wasm__WEBPACK_IMPORTED_MODULE_1__.__wbindgen_start();\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });\n\n//# sourceURL=webpack:///./gameboy/index.js?"); +eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"__wbg_addEventListener_b2c53f6c8c23bac8\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_addEventListener_b2c53f6c8c23bac8),\n/* harmony export */ \"__wbg_appendChild_d21bac021b5bbfde\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_appendChild_d21bac021b5bbfde),\n/* harmony export */ \"__wbg_call_33d7bcddbbfa394a\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_call_33d7bcddbbfa394a),\n/* harmony export */ \"__wbg_call_65af9f665ab6ade5\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_call_65af9f665ab6ade5),\n/* harmony export */ \"__wbg_createElement_28fc3740fb11defb\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_createElement_28fc3740fb11defb),\n/* harmony export */ \"__wbg_document_15b2e504fb1556d6\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_document_15b2e504fb1556d6),\n/* harmony export */ \"__wbg_error_09919627ac0992f5\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_error_09919627ac0992f5),\n/* harmony export */ \"__wbg_getContext_efe7e95b72348104\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_getContext_efe7e95b72348104),\n/* harmony export */ \"__wbg_getElementById_927eae2597d26692\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_getElementById_927eae2597d26692),\n/* harmony export */ \"__wbg_globalThis_3348936ac49df00a\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_globalThis_3348936ac49df00a),\n/* harmony export */ \"__wbg_global_67175caf56f55ca9\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_global_67175caf56f55ca9),\n/* harmony export */ \"__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773),\n/* harmony export */ \"__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b),\n/* harmony export */ \"__wbg_instanceof_Window_42f092928baaee84\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_instanceof_Window_42f092928baaee84),\n/* harmony export */ \"__wbg_keyCode_3075e448a1211124\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_keyCode_3075e448a1211124),\n/* harmony export */ \"__wbg_log_7bbf821c47ebf2ae\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_log_7bbf821c47ebf2ae),\n/* harmony export */ \"__wbg_new_52205195aa880fc2\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_new_52205195aa880fc2),\n/* harmony export */ \"__wbg_new_693216e109162396\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_new_693216e109162396),\n/* harmony export */ \"__wbg_newnoargs_971e9a5abe185139\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_newnoargs_971e9a5abe185139),\n/* harmony export */ \"__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed),\n/* harmony export */ \"__wbg_putImageData_b6835d76d1cb45dd\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_putImageData_b6835d76d1cb45dd),\n/* harmony export */ \"__wbg_requestAnimationFrame_9e5ccef32fec2b99\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_requestAnimationFrame_9e5ccef32fec2b99),\n/* harmony export */ \"__wbg_resolve_0107b3a501450ba0\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_resolve_0107b3a501450ba0),\n/* harmony export */ \"__wbg_self_fd00a1ef86d1b2ed\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_self_fd00a1ef86d1b2ed),\n/* harmony export */ \"__wbg_setheight_d1ec9b4faad45a42\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_setheight_d1ec9b4faad45a42),\n/* harmony export */ \"__wbg_setwidth_79da97dd2684789d\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_setwidth_79da97dd2684789d),\n/* harmony export */ \"__wbg_stack_0ddaca5d1abfb52f\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_stack_0ddaca5d1abfb52f),\n/* harmony export */ \"__wbg_then_18da6e5453572fc8\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_then_18da6e5453572fc8),\n/* harmony export */ \"__wbg_window_6f6e346d8bbd61d7\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbg_window_6f6e346d8bbd61d7),\n/* harmony export */ \"__wbindgen_cb_drop\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_cb_drop),\n/* harmony export */ \"__wbindgen_closure_wrapper250\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_closure_wrapper250),\n/* harmony export */ \"__wbindgen_closure_wrapper252\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_closure_wrapper252),\n/* harmony export */ \"__wbindgen_closure_wrapper867\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_closure_wrapper867),\n/* harmony export */ \"__wbindgen_debug_string\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_debug_string),\n/* harmony export */ \"__wbindgen_is_undefined\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_is_undefined),\n/* harmony export */ \"__wbindgen_object_clone_ref\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_object_clone_ref),\n/* harmony export */ \"__wbindgen_object_drop_ref\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_object_drop_ref),\n/* harmony export */ \"__wbindgen_throw\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_throw),\n/* harmony export */ \"render\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.render),\n/* harmony export */ \"start\": () => (/* reexport safe */ _index_bg_js__WEBPACK_IMPORTED_MODULE_0__.start)\n/* harmony export */ });\n/* harmony import */ var _index_bg_wasm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index_bg.wasm */ \"./gameboy/index_bg.wasm\");\n/* harmony import */ var _index_bg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index_bg.js */ \"./gameboy/index_bg.js\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_index_bg_js__WEBPACK_IMPORTED_MODULE_0__, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_1__]);\n([_index_bg_js__WEBPACK_IMPORTED_MODULE_0__, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_1__] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__);\n\n\n_index_bg_wasm__WEBPACK_IMPORTED_MODULE_1__.__wbindgen_start();\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });\n\n//# sourceURL=webpack:///./gameboy/index.js?"); /***/ }), @@ -27,7 +27,7 @@ eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"__wbg_addEventListener_b2c53f6c8c23bac8\": () => (/* binding */ __wbg_addEventListener_b2c53f6c8c23bac8),\n/* harmony export */ \"__wbg_appendChild_d21bac021b5bbfde\": () => (/* binding */ __wbg_appendChild_d21bac021b5bbfde),\n/* harmony export */ \"__wbg_call_33d7bcddbbfa394a\": () => (/* binding */ __wbg_call_33d7bcddbbfa394a),\n/* harmony export */ \"__wbg_call_65af9f665ab6ade5\": () => (/* binding */ __wbg_call_65af9f665ab6ade5),\n/* harmony export */ \"__wbg_createElement_28fc3740fb11defb\": () => (/* binding */ __wbg_createElement_28fc3740fb11defb),\n/* harmony export */ \"__wbg_document_15b2e504fb1556d6\": () => (/* binding */ __wbg_document_15b2e504fb1556d6),\n/* harmony export */ \"__wbg_error_09919627ac0992f5\": () => (/* binding */ __wbg_error_09919627ac0992f5),\n/* harmony export */ \"__wbg_getContext_efe7e95b72348104\": () => (/* binding */ __wbg_getContext_efe7e95b72348104),\n/* harmony export */ \"__wbg_getElementById_927eae2597d26692\": () => (/* binding */ __wbg_getElementById_927eae2597d26692),\n/* harmony export */ \"__wbg_globalThis_3348936ac49df00a\": () => (/* binding */ __wbg_globalThis_3348936ac49df00a),\n/* harmony export */ \"__wbg_global_67175caf56f55ca9\": () => (/* binding */ __wbg_global_67175caf56f55ca9),\n/* harmony export */ \"__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773\": () => (/* binding */ __wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773),\n/* harmony export */ \"__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b\": () => (/* binding */ __wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b),\n/* harmony export */ \"__wbg_instanceof_Window_42f092928baaee84\": () => (/* binding */ __wbg_instanceof_Window_42f092928baaee84),\n/* harmony export */ \"__wbg_keyCode_3075e448a1211124\": () => (/* binding */ __wbg_keyCode_3075e448a1211124),\n/* harmony export */ \"__wbg_log_5f8746597fe47331\": () => (/* binding */ __wbg_log_5f8746597fe47331),\n/* harmony export */ \"__wbg_new_52205195aa880fc2\": () => (/* binding */ __wbg_new_52205195aa880fc2),\n/* harmony export */ \"__wbg_new_693216e109162396\": () => (/* binding */ __wbg_new_693216e109162396),\n/* harmony export */ \"__wbg_newnoargs_971e9a5abe185139\": () => (/* binding */ __wbg_newnoargs_971e9a5abe185139),\n/* harmony export */ \"__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed\": () => (/* binding */ __wbg_newwithu8clampedarrayandsh_67cfbae8df523bed),\n/* harmony export */ \"__wbg_putImageData_b6835d76d1cb45dd\": () => (/* binding */ __wbg_putImageData_b6835d76d1cb45dd),\n/* harmony export */ \"__wbg_requestAnimationFrame_9e5ccef32fec2b99\": () => (/* binding */ __wbg_requestAnimationFrame_9e5ccef32fec2b99),\n/* harmony export */ \"__wbg_resolve_0107b3a501450ba0\": () => (/* binding */ __wbg_resolve_0107b3a501450ba0),\n/* harmony export */ \"__wbg_self_fd00a1ef86d1b2ed\": () => (/* binding */ __wbg_self_fd00a1ef86d1b2ed),\n/* harmony export */ \"__wbg_setheight_d1ec9b4faad45a42\": () => (/* binding */ __wbg_setheight_d1ec9b4faad45a42),\n/* harmony export */ \"__wbg_setwidth_79da97dd2684789d\": () => (/* binding */ __wbg_setwidth_79da97dd2684789d),\n/* harmony export */ \"__wbg_stack_0ddaca5d1abfb52f\": () => (/* binding */ __wbg_stack_0ddaca5d1abfb52f),\n/* harmony export */ \"__wbg_then_18da6e5453572fc8\": () => (/* binding */ __wbg_then_18da6e5453572fc8),\n/* harmony export */ \"__wbg_window_6f6e346d8bbd61d7\": () => (/* binding */ __wbg_window_6f6e346d8bbd61d7),\n/* harmony export */ \"__wbindgen_cb_drop\": () => (/* binding */ __wbindgen_cb_drop),\n/* harmony export */ \"__wbindgen_closure_wrapper671\": () => (/* binding */ __wbindgen_closure_wrapper671),\n/* harmony export */ \"__wbindgen_closure_wrapper673\": () => (/* binding */ __wbindgen_closure_wrapper673),\n/* harmony export */ \"__wbindgen_closure_wrapper856\": () => (/* binding */ __wbindgen_closure_wrapper856),\n/* harmony export */ \"__wbindgen_debug_string\": () => (/* binding */ __wbindgen_debug_string),\n/* harmony export */ \"__wbindgen_is_undefined\": () => (/* binding */ __wbindgen_is_undefined),\n/* harmony export */ \"__wbindgen_object_clone_ref\": () => (/* binding */ __wbindgen_object_clone_ref),\n/* harmony export */ \"__wbindgen_object_drop_ref\": () => (/* binding */ __wbindgen_object_drop_ref),\n/* harmony export */ \"__wbindgen_throw\": () => (/* binding */ __wbindgen_throw),\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"start\": () => (/* binding */ start)\n/* harmony export */ });\n/* harmony import */ var _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index_bg.wasm */ \"./gameboy/index_bg.wasm\");\n/* module decorator */ module = __webpack_require__.hmd(module);\n/* provided dependency */ var TextEncoder = __webpack_require__(/*! text-encoding */ \"./node_modules/text-encoding/index.js\")[\"TextEncoder\"];\n/* provided dependency */ var TextDecoder = __webpack_require__(/*! text-encoding */ \"./node_modules/text-encoding/index.js\")[\"TextDecoder\"];\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__]);\n_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];\n\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nfunction _assertBoolean(n) {\n if (typeof(n) !== 'boolean') {\n throw new Error('expected a boolean argument');\n }\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n if (typeof(heap_next) !== 'number') throw new Error('corrupt heap');\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachedUint8Memory0 = new Uint8Array();\n\nfunction getUint8Memory0() {\n if (cachedUint8Memory0.byteLength === 0) {\n cachedUint8Memory0 = new Uint8Array(_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer);\n }\n return cachedUint8Memory0;\n}\n\nconst lTextEncoder = typeof TextEncoder === 'undefined' ? (0, module.require)('util').TextEncoder : TextEncoder;\n\nlet cachedTextEncoder = new lTextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (typeof(arg) !== 'string') throw new Error('expected a string argument');\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n if (ret.read !== arg.length) throw new Error('failed to pass whole string');\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedInt32Memory0 = new Int32Array();\n\nfunction getInt32Memory0() {\n if (cachedInt32Memory0.byteLength === 0) {\n cachedInt32Memory0 = new Int32Array(_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer);\n }\n return cachedInt32Memory0;\n}\n\nconst lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;\n\nlet cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n const state = { a: arg0, b: arg1, cnt: 1, dtor };\n const real = (...args) => {\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally {\n if (--state.cnt === 0) {\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_export_2.get(state.dtor)(a, state.b);\n\n } else {\n state.a = a;\n }\n }\n };\n real.original = state;\n\n return real;\n}\n\nfunction logError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n let error = (function () {\n try {\n return e instanceof Error ? `${e.message}\\n\\nStack:\\n${e.stack}` : e.toString();\n } catch(_) {\n return \"\";\n }\n }());\n console.error(\"wasm-bindgen: imported JS function that was not marked as `catch` threw an error:\", error);\n throw e;\n }\n}\n\nfunction _assertNum(n) {\n if (typeof(n) !== 'number') throw new Error('expected a number argument');\n}\nfunction __wbg_adapter_14(arg0, arg1, arg2) {\n _assertNum(arg0);\n _assertNum(arg1);\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h2473a2a79c2641e6(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_17(arg0, arg1) {\n _assertNum(arg0);\n _assertNum(arg1);\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h70eb12c5c47d70fd(arg0, arg1);\n}\n\nfunction __wbg_adapter_20(arg0, arg1, arg2) {\n _assertNum(arg0);\n _assertNum(arg1);\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h937b9557724cea87(arg0, arg1, addHeapObject(arg2));\n}\n\n/**\n* @returns {Promise}\n*/\nfunction start() {\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.start();\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1);\n getUint8Memory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n/**\n* @param {Uint8Array} rom\n* @returns {Promise}\n*/\nfunction render(rom) {\n const ptr0 = passArray8ToWasm0(rom, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.render(ptr0, len0);\n return takeObject(ret);\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_exn_store(addHeapObject(e));\n }\n}\n\nlet cachedUint8ClampedMemory0 = new Uint8ClampedArray();\n\nfunction getUint8ClampedMemory0() {\n if (cachedUint8ClampedMemory0.byteLength === 0) {\n cachedUint8ClampedMemory0 = new Uint8ClampedArray(_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer);\n }\n return cachedUint8ClampedMemory0;\n}\n\nfunction getClampedArrayU8FromWasm0(ptr, len) {\n return getUint8ClampedMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\nfunction __wbg_adapter_61(arg0, arg1, arg2, arg3) {\n _assertNum(arg0);\n _assertNum(arg1);\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.wasm_bindgen__convert__closures__invoke2_mut__h41c67cc882867e03(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));\n}\n\nfunction __wbindgen_cb_drop(arg0) {\n const obj = takeObject(arg0).original;\n if (obj.cnt-- == 1) {\n obj.a = 0;\n return true;\n }\n const ret = false;\n _assertBoolean(ret);\n return ret;\n};\n\nfunction __wbg_log_5f8746597fe47331() { return logError(function (arg0, arg1) {\n try {\n console.log(getStringFromWasm0(arg0, arg1));\n } finally {\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_free(arg0, arg1);\n }\n}, arguments) };\n\nfunction __wbg_instanceof_Window_42f092928baaee84() { return logError(function (arg0) {\n const ret = getObject(arg0) instanceof Window;\n _assertBoolean(ret);\n return ret;\n}, arguments) };\n\nfunction __wbg_document_15b2e504fb1556d6() { return logError(function (arg0) {\n const ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_requestAnimationFrame_9e5ccef32fec2b99() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).requestAnimationFrame(getObject(arg1));\n _assertNum(ret);\n return ret;\n}, arguments) };\n\nfunction __wbg_createElement_28fc3740fb11defb() { return handleError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_getElementById_927eae2597d26692() { return logError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_addEventListener_b2c53f6c8c23bac8() { return handleError(function (arg0, arg1, arg2, arg3) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n}, arguments) };\n\nfunction __wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b() { return logError(function (arg0) {\n const ret = getObject(arg0) instanceof HTMLCanvasElement;\n _assertBoolean(ret);\n return ret;\n}, arguments) };\n\nfunction __wbg_setwidth_79da97dd2684789d() { return logError(function (arg0, arg1) {\n getObject(arg0).width = arg1 >>> 0;\n}, arguments) };\n\nfunction __wbg_setheight_d1ec9b4faad45a42() { return logError(function (arg0, arg1) {\n getObject(arg0).height = arg1 >>> 0;\n}, arguments) };\n\nfunction __wbg_getContext_efe7e95b72348104() { return handleError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_newwithu8clampedarrayandsh_67cfbae8df523bed() { return handleError(function (arg0, arg1, arg2, arg3) {\n const ret = new ImageData(getClampedArrayU8FromWasm0(arg0, arg1), arg2 >>> 0, arg3 >>> 0);\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_keyCode_3075e448a1211124() { return logError(function (arg0) {\n const ret = getObject(arg0).keyCode;\n _assertNum(ret);\n return ret;\n}, arguments) };\n\nfunction __wbg_appendChild_d21bac021b5bbfde() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).appendChild(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773() { return logError(function (arg0) {\n const ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n _assertBoolean(ret);\n return ret;\n}, arguments) };\n\nfunction __wbg_putImageData_b6835d76d1cb45dd() { return handleError(function (arg0, arg1, arg2, arg3) {\n getObject(arg0).putImageData(getObject(arg1), arg2, arg3);\n}, arguments) };\n\nfunction __wbg_newnoargs_971e9a5abe185139() { return logError(function (arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_call_33d7bcddbbfa394a() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_call_65af9f665ab6ade5() { return handleError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_new_52205195aa880fc2() { return logError(function (arg0, arg1) {\n try {\n var state0 = {a: arg0, b: arg1};\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return __wbg_adapter_61(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return addHeapObject(ret);\n } finally {\n state0.a = state0.b = 0;\n }\n}, arguments) };\n\nfunction __wbg_resolve_0107b3a501450ba0() { return logError(function (arg0) {\n const ret = Promise.resolve(getObject(arg0));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_then_18da6e5453572fc8() { return logError(function (arg0, arg1) {\n const ret = getObject(arg0).then(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_globalThis_3348936ac49df00a() { return handleError(function () {\n const ret = globalThis.globalThis;\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_self_fd00a1ef86d1b2ed() { return handleError(function () {\n const ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_window_6f6e346d8bbd61d7() { return handleError(function () {\n const ret = window.window;\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_global_67175caf56f55ca9() { return handleError(function () {\n const ret = __webpack_require__.g.global;\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbindgen_is_undefined(arg0) {\n const ret = getObject(arg0) === undefined;\n _assertBoolean(ret);\n return ret;\n};\n\nfunction __wbindgen_object_clone_ref(arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nfunction __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nfunction __wbg_error_09919627ac0992f5() { return logError(function (arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_free(arg0, arg1);\n }\n}, arguments) };\n\nfunction __wbg_new_693216e109162396() { return logError(function () {\n const ret = new Error();\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_stack_0ddaca5d1abfb52f() { return logError(function (arg0, arg1) {\n const ret = getObject(arg1).stack;\n const ptr0 = passStringToWasm0(ret, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_malloc, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n}, arguments) };\n\nfunction __wbindgen_debug_string(arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr0 = passStringToWasm0(ret, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_malloc, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nfunction __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\nfunction __wbindgen_closure_wrapper671() { return logError(function (arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_14);\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbindgen_closure_wrapper673() { return logError(function (arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 74, __wbg_adapter_17);\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbindgen_closure_wrapper856() { return logError(function (arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 79, __wbg_adapter_20);\n return addHeapObject(ret);\n}, arguments) };\n\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });\n\n//# sourceURL=webpack:///./gameboy/index_bg.js?"); +eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => { try {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"__wbg_addEventListener_b2c53f6c8c23bac8\": () => (/* binding */ __wbg_addEventListener_b2c53f6c8c23bac8),\n/* harmony export */ \"__wbg_appendChild_d21bac021b5bbfde\": () => (/* binding */ __wbg_appendChild_d21bac021b5bbfde),\n/* harmony export */ \"__wbg_call_33d7bcddbbfa394a\": () => (/* binding */ __wbg_call_33d7bcddbbfa394a),\n/* harmony export */ \"__wbg_call_65af9f665ab6ade5\": () => (/* binding */ __wbg_call_65af9f665ab6ade5),\n/* harmony export */ \"__wbg_createElement_28fc3740fb11defb\": () => (/* binding */ __wbg_createElement_28fc3740fb11defb),\n/* harmony export */ \"__wbg_document_15b2e504fb1556d6\": () => (/* binding */ __wbg_document_15b2e504fb1556d6),\n/* harmony export */ \"__wbg_error_09919627ac0992f5\": () => (/* binding */ __wbg_error_09919627ac0992f5),\n/* harmony export */ \"__wbg_getContext_efe7e95b72348104\": () => (/* binding */ __wbg_getContext_efe7e95b72348104),\n/* harmony export */ \"__wbg_getElementById_927eae2597d26692\": () => (/* binding */ __wbg_getElementById_927eae2597d26692),\n/* harmony export */ \"__wbg_globalThis_3348936ac49df00a\": () => (/* binding */ __wbg_globalThis_3348936ac49df00a),\n/* harmony export */ \"__wbg_global_67175caf56f55ca9\": () => (/* binding */ __wbg_global_67175caf56f55ca9),\n/* harmony export */ \"__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773\": () => (/* binding */ __wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773),\n/* harmony export */ \"__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b\": () => (/* binding */ __wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b),\n/* harmony export */ \"__wbg_instanceof_Window_42f092928baaee84\": () => (/* binding */ __wbg_instanceof_Window_42f092928baaee84),\n/* harmony export */ \"__wbg_keyCode_3075e448a1211124\": () => (/* binding */ __wbg_keyCode_3075e448a1211124),\n/* harmony export */ \"__wbg_log_7bbf821c47ebf2ae\": () => (/* binding */ __wbg_log_7bbf821c47ebf2ae),\n/* harmony export */ \"__wbg_new_52205195aa880fc2\": () => (/* binding */ __wbg_new_52205195aa880fc2),\n/* harmony export */ \"__wbg_new_693216e109162396\": () => (/* binding */ __wbg_new_693216e109162396),\n/* harmony export */ \"__wbg_newnoargs_971e9a5abe185139\": () => (/* binding */ __wbg_newnoargs_971e9a5abe185139),\n/* harmony export */ \"__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed\": () => (/* binding */ __wbg_newwithu8clampedarrayandsh_67cfbae8df523bed),\n/* harmony export */ \"__wbg_putImageData_b6835d76d1cb45dd\": () => (/* binding */ __wbg_putImageData_b6835d76d1cb45dd),\n/* harmony export */ \"__wbg_requestAnimationFrame_9e5ccef32fec2b99\": () => (/* binding */ __wbg_requestAnimationFrame_9e5ccef32fec2b99),\n/* harmony export */ \"__wbg_resolve_0107b3a501450ba0\": () => (/* binding */ __wbg_resolve_0107b3a501450ba0),\n/* harmony export */ \"__wbg_self_fd00a1ef86d1b2ed\": () => (/* binding */ __wbg_self_fd00a1ef86d1b2ed),\n/* harmony export */ \"__wbg_setheight_d1ec9b4faad45a42\": () => (/* binding */ __wbg_setheight_d1ec9b4faad45a42),\n/* harmony export */ \"__wbg_setwidth_79da97dd2684789d\": () => (/* binding */ __wbg_setwidth_79da97dd2684789d),\n/* harmony export */ \"__wbg_stack_0ddaca5d1abfb52f\": () => (/* binding */ __wbg_stack_0ddaca5d1abfb52f),\n/* harmony export */ \"__wbg_then_18da6e5453572fc8\": () => (/* binding */ __wbg_then_18da6e5453572fc8),\n/* harmony export */ \"__wbg_window_6f6e346d8bbd61d7\": () => (/* binding */ __wbg_window_6f6e346d8bbd61d7),\n/* harmony export */ \"__wbindgen_cb_drop\": () => (/* binding */ __wbindgen_cb_drop),\n/* harmony export */ \"__wbindgen_closure_wrapper250\": () => (/* binding */ __wbindgen_closure_wrapper250),\n/* harmony export */ \"__wbindgen_closure_wrapper252\": () => (/* binding */ __wbindgen_closure_wrapper252),\n/* harmony export */ \"__wbindgen_closure_wrapper867\": () => (/* binding */ __wbindgen_closure_wrapper867),\n/* harmony export */ \"__wbindgen_debug_string\": () => (/* binding */ __wbindgen_debug_string),\n/* harmony export */ \"__wbindgen_is_undefined\": () => (/* binding */ __wbindgen_is_undefined),\n/* harmony export */ \"__wbindgen_object_clone_ref\": () => (/* binding */ __wbindgen_object_clone_ref),\n/* harmony export */ \"__wbindgen_object_drop_ref\": () => (/* binding */ __wbindgen_object_drop_ref),\n/* harmony export */ \"__wbindgen_throw\": () => (/* binding */ __wbindgen_throw),\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"start\": () => (/* binding */ start)\n/* harmony export */ });\n/* harmony import */ var _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index_bg.wasm */ \"./gameboy/index_bg.wasm\");\n/* module decorator */ module = __webpack_require__.hmd(module);\n/* provided dependency */ var TextEncoder = __webpack_require__(/*! text-encoding */ \"./node_modules/text-encoding/index.js\")[\"TextEncoder\"];\n/* provided dependency */ var TextDecoder = __webpack_require__(/*! text-encoding */ \"./node_modules/text-encoding/index.js\")[\"TextDecoder\"];\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__]);\n_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__)[0];\n\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nfunction _assertBoolean(n) {\n if (typeof(n) !== 'boolean') {\n throw new Error('expected a boolean argument');\n }\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n if (typeof(heap_next) !== 'number') throw new Error('corrupt heap');\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachedUint8Memory0 = new Uint8Array();\n\nfunction getUint8Memory0() {\n if (cachedUint8Memory0.byteLength === 0) {\n cachedUint8Memory0 = new Uint8Array(_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer);\n }\n return cachedUint8Memory0;\n}\n\nconst lTextEncoder = typeof TextEncoder === 'undefined' ? (0, module.require)('util').TextEncoder : TextEncoder;\n\nlet cachedTextEncoder = new lTextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (typeof(arg) !== 'string') throw new Error('expected a string argument');\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n if (ret.read !== arg.length) throw new Error('failed to pass whole string');\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedInt32Memory0 = new Int32Array();\n\nfunction getInt32Memory0() {\n if (cachedInt32Memory0.byteLength === 0) {\n cachedInt32Memory0 = new Int32Array(_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer);\n }\n return cachedInt32Memory0;\n}\n\nconst lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;\n\nlet cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n const state = { a: arg0, b: arg1, cnt: 1, dtor };\n const real = (...args) => {\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally {\n if (--state.cnt === 0) {\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_export_2.get(state.dtor)(a, state.b);\n\n } else {\n state.a = a;\n }\n }\n };\n real.original = state;\n\n return real;\n}\n\nfunction logError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n let error = (function () {\n try {\n return e instanceof Error ? `${e.message}\\n\\nStack:\\n${e.stack}` : e.toString();\n } catch(_) {\n return \"\";\n }\n }());\n console.error(\"wasm-bindgen: imported JS function that was not marked as `catch` threw an error:\", error);\n throw e;\n }\n}\n\nfunction _assertNum(n) {\n if (typeof(n) !== 'number') throw new Error('expected a number argument');\n}\nfunction __wbg_adapter_14(arg0, arg1, arg2) {\n _assertNum(arg0);\n _assertNum(arg1);\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hb276e41915bfdd81(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_17(arg0, arg1) {\n _assertNum(arg0);\n _assertNum(arg1);\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h860fd3381ee55b2f(arg0, arg1);\n}\n\nfunction __wbg_adapter_20(arg0, arg1, arg2) {\n _assertNum(arg0);\n _assertNum(arg1);\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd7160ead4864e369(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction passArray8ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 1);\n getUint8Memory0().set(arg, ptr / 1);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n/**\n* @param {Uint8Array} rom\n* @returns {Promise}\n*/\nfunction render(rom) {\n const ptr0 = passArray8ToWasm0(rom, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.render(ptr0, len0);\n return takeObject(ret);\n}\n\n/**\n* @returns {Promise}\n*/\nfunction start() {\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.start();\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_exn_store(addHeapObject(e));\n }\n}\n\nlet cachedUint8ClampedMemory0 = new Uint8ClampedArray();\n\nfunction getUint8ClampedMemory0() {\n if (cachedUint8ClampedMemory0.byteLength === 0) {\n cachedUint8ClampedMemory0 = new Uint8ClampedArray(_index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer);\n }\n return cachedUint8ClampedMemory0;\n}\n\nfunction getClampedArrayU8FromWasm0(ptr, len) {\n return getUint8ClampedMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\nfunction __wbg_adapter_61(arg0, arg1, arg2, arg3) {\n _assertNum(arg0);\n _assertNum(arg1);\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.wasm_bindgen__convert__closures__invoke2_mut__h98b64de0a37f63a2(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));\n}\n\nfunction __wbg_log_7bbf821c47ebf2ae() { return logError(function (arg0, arg1) {\n try {\n console.log(getStringFromWasm0(arg0, arg1));\n } finally {\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_free(arg0, arg1);\n }\n}, arguments) };\n\nfunction __wbindgen_cb_drop(arg0) {\n const obj = takeObject(arg0).original;\n if (obj.cnt-- == 1) {\n obj.a = 0;\n return true;\n }\n const ret = false;\n _assertBoolean(ret);\n return ret;\n};\n\nfunction __wbg_instanceof_Window_42f092928baaee84() { return logError(function (arg0) {\n const ret = getObject(arg0) instanceof Window;\n _assertBoolean(ret);\n return ret;\n}, arguments) };\n\nfunction __wbg_document_15b2e504fb1556d6() { return logError(function (arg0) {\n const ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_requestAnimationFrame_9e5ccef32fec2b99() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).requestAnimationFrame(getObject(arg1));\n _assertNum(ret);\n return ret;\n}, arguments) };\n\nfunction __wbg_createElement_28fc3740fb11defb() { return handleError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_getElementById_927eae2597d26692() { return logError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_addEventListener_b2c53f6c8c23bac8() { return handleError(function (arg0, arg1, arg2, arg3) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n}, arguments) };\n\nfunction __wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b() { return logError(function (arg0) {\n const ret = getObject(arg0) instanceof HTMLCanvasElement;\n _assertBoolean(ret);\n return ret;\n}, arguments) };\n\nfunction __wbg_setwidth_79da97dd2684789d() { return logError(function (arg0, arg1) {\n getObject(arg0).width = arg1 >>> 0;\n}, arguments) };\n\nfunction __wbg_setheight_d1ec9b4faad45a42() { return logError(function (arg0, arg1) {\n getObject(arg0).height = arg1 >>> 0;\n}, arguments) };\n\nfunction __wbg_getContext_efe7e95b72348104() { return handleError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_newwithu8clampedarrayandsh_67cfbae8df523bed() { return handleError(function (arg0, arg1, arg2, arg3) {\n const ret = new ImageData(getClampedArrayU8FromWasm0(arg0, arg1), arg2 >>> 0, arg3 >>> 0);\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_keyCode_3075e448a1211124() { return logError(function (arg0) {\n const ret = getObject(arg0).keyCode;\n _assertNum(ret);\n return ret;\n}, arguments) };\n\nfunction __wbg_appendChild_d21bac021b5bbfde() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).appendChild(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773() { return logError(function (arg0) {\n const ret = getObject(arg0) instanceof CanvasRenderingContext2D;\n _assertBoolean(ret);\n return ret;\n}, arguments) };\n\nfunction __wbg_putImageData_b6835d76d1cb45dd() { return handleError(function (arg0, arg1, arg2, arg3) {\n getObject(arg0).putImageData(getObject(arg1), arg2, arg3);\n}, arguments) };\n\nfunction __wbg_newnoargs_971e9a5abe185139() { return logError(function (arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_call_33d7bcddbbfa394a() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_call_65af9f665ab6ade5() { return handleError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_new_52205195aa880fc2() { return logError(function (arg0, arg1) {\n try {\n var state0 = {a: arg0, b: arg1};\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return __wbg_adapter_61(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return addHeapObject(ret);\n } finally {\n state0.a = state0.b = 0;\n }\n}, arguments) };\n\nfunction __wbg_resolve_0107b3a501450ba0() { return logError(function (arg0) {\n const ret = Promise.resolve(getObject(arg0));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_then_18da6e5453572fc8() { return logError(function (arg0, arg1) {\n const ret = getObject(arg0).then(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_globalThis_3348936ac49df00a() { return handleError(function () {\n const ret = globalThis.globalThis;\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_self_fd00a1ef86d1b2ed() { return handleError(function () {\n const ret = self.self;\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_window_6f6e346d8bbd61d7() { return handleError(function () {\n const ret = window.window;\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_global_67175caf56f55ca9() { return handleError(function () {\n const ret = __webpack_require__.g.global;\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbindgen_is_undefined(arg0) {\n const ret = getObject(arg0) === undefined;\n _assertBoolean(ret);\n return ret;\n};\n\nfunction __wbindgen_object_clone_ref(arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nfunction __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nfunction __wbg_error_09919627ac0992f5() { return logError(function (arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_free(arg0, arg1);\n }\n}, arguments) };\n\nfunction __wbg_new_693216e109162396() { return logError(function () {\n const ret = new Error();\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbg_stack_0ddaca5d1abfb52f() { return logError(function (arg0, arg1) {\n const ret = getObject(arg1).stack;\n const ptr0 = passStringToWasm0(ret, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_malloc, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n}, arguments) };\n\nfunction __wbindgen_debug_string(arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr0 = passStringToWasm0(ret, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_malloc, _index_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nfunction __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\nfunction __wbindgen_closure_wrapper250() { return logError(function (arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 71, __wbg_adapter_14);\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbindgen_closure_wrapper252() { return logError(function (arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 69, __wbg_adapter_17);\n return addHeapObject(ret);\n}, arguments) };\n\nfunction __wbindgen_closure_wrapper867() { return logError(function (arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 79, __wbg_adapter_20);\n return addHeapObject(ret);\n}, arguments) };\n\n\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } });\n\n//# sourceURL=webpack:///./gameboy/index_bg.js?"); /***/ }), @@ -79,7 +79,7 @@ eval("// This is free and unencumbered software released into the public domain. /***/ ((module, exports, __webpack_require__) => { "use strict"; -eval("var __webpack_instantiate__ = ([WEBPACK_IMPORTED_MODULE_0]) => {\n\treturn __webpack_require__.v(exports, module.id, \"ddcc0b23a70412fb67e0\", {\n\t\t\"./index_bg.js\": {\n\t\t\t\"__wbindgen_cb_drop\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_cb_drop,\n\t\t\t\"__wbg_log_5f8746597fe47331\": WEBPACK_IMPORTED_MODULE_0.__wbg_log_5f8746597fe47331,\n\t\t\t\"__wbg_instanceof_Window_42f092928baaee84\": WEBPACK_IMPORTED_MODULE_0.__wbg_instanceof_Window_42f092928baaee84,\n\t\t\t\"__wbg_document_15b2e504fb1556d6\": WEBPACK_IMPORTED_MODULE_0.__wbg_document_15b2e504fb1556d6,\n\t\t\t\"__wbg_requestAnimationFrame_9e5ccef32fec2b99\": WEBPACK_IMPORTED_MODULE_0.__wbg_requestAnimationFrame_9e5ccef32fec2b99,\n\t\t\t\"__wbg_createElement_28fc3740fb11defb\": WEBPACK_IMPORTED_MODULE_0.__wbg_createElement_28fc3740fb11defb,\n\t\t\t\"__wbg_getElementById_927eae2597d26692\": WEBPACK_IMPORTED_MODULE_0.__wbg_getElementById_927eae2597d26692,\n\t\t\t\"__wbg_addEventListener_b2c53f6c8c23bac8\": WEBPACK_IMPORTED_MODULE_0.__wbg_addEventListener_b2c53f6c8c23bac8,\n\t\t\t\"__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b\": WEBPACK_IMPORTED_MODULE_0.__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b,\n\t\t\t\"__wbg_setwidth_79da97dd2684789d\": WEBPACK_IMPORTED_MODULE_0.__wbg_setwidth_79da97dd2684789d,\n\t\t\t\"__wbg_setheight_d1ec9b4faad45a42\": WEBPACK_IMPORTED_MODULE_0.__wbg_setheight_d1ec9b4faad45a42,\n\t\t\t\"__wbg_getContext_efe7e95b72348104\": WEBPACK_IMPORTED_MODULE_0.__wbg_getContext_efe7e95b72348104,\n\t\t\t\"__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed\": WEBPACK_IMPORTED_MODULE_0.__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed,\n\t\t\t\"__wbg_keyCode_3075e448a1211124\": WEBPACK_IMPORTED_MODULE_0.__wbg_keyCode_3075e448a1211124,\n\t\t\t\"__wbg_appendChild_d21bac021b5bbfde\": WEBPACK_IMPORTED_MODULE_0.__wbg_appendChild_d21bac021b5bbfde,\n\t\t\t\"__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773\": WEBPACK_IMPORTED_MODULE_0.__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773,\n\t\t\t\"__wbg_putImageData_b6835d76d1cb45dd\": WEBPACK_IMPORTED_MODULE_0.__wbg_putImageData_b6835d76d1cb45dd,\n\t\t\t\"__wbg_newnoargs_971e9a5abe185139\": WEBPACK_IMPORTED_MODULE_0.__wbg_newnoargs_971e9a5abe185139,\n\t\t\t\"__wbg_call_33d7bcddbbfa394a\": WEBPACK_IMPORTED_MODULE_0.__wbg_call_33d7bcddbbfa394a,\n\t\t\t\"__wbg_call_65af9f665ab6ade5\": WEBPACK_IMPORTED_MODULE_0.__wbg_call_65af9f665ab6ade5,\n\t\t\t\"__wbg_new_52205195aa880fc2\": WEBPACK_IMPORTED_MODULE_0.__wbg_new_52205195aa880fc2,\n\t\t\t\"__wbg_resolve_0107b3a501450ba0\": WEBPACK_IMPORTED_MODULE_0.__wbg_resolve_0107b3a501450ba0,\n\t\t\t\"__wbg_then_18da6e5453572fc8\": WEBPACK_IMPORTED_MODULE_0.__wbg_then_18da6e5453572fc8,\n\t\t\t\"__wbg_globalThis_3348936ac49df00a\": WEBPACK_IMPORTED_MODULE_0.__wbg_globalThis_3348936ac49df00a,\n\t\t\t\"__wbg_self_fd00a1ef86d1b2ed\": WEBPACK_IMPORTED_MODULE_0.__wbg_self_fd00a1ef86d1b2ed,\n\t\t\t\"__wbg_window_6f6e346d8bbd61d7\": WEBPACK_IMPORTED_MODULE_0.__wbg_window_6f6e346d8bbd61d7,\n\t\t\t\"__wbg_global_67175caf56f55ca9\": WEBPACK_IMPORTED_MODULE_0.__wbg_global_67175caf56f55ca9,\n\t\t\t\"__wbindgen_is_undefined\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_is_undefined,\n\t\t\t\"__wbindgen_object_clone_ref\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_object_clone_ref,\n\t\t\t\"__wbindgen_object_drop_ref\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_object_drop_ref,\n\t\t\t\"__wbg_error_09919627ac0992f5\": WEBPACK_IMPORTED_MODULE_0.__wbg_error_09919627ac0992f5,\n\t\t\t\"__wbg_new_693216e109162396\": WEBPACK_IMPORTED_MODULE_0.__wbg_new_693216e109162396,\n\t\t\t\"__wbg_stack_0ddaca5d1abfb52f\": WEBPACK_IMPORTED_MODULE_0.__wbg_stack_0ddaca5d1abfb52f,\n\t\t\t\"__wbindgen_debug_string\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_debug_string,\n\t\t\t\"__wbindgen_throw\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_throw,\n\t\t\t\"__wbindgen_closure_wrapper671\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_closure_wrapper671,\n\t\t\t\"__wbindgen_closure_wrapper673\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_closure_wrapper673,\n\t\t\t\"__wbindgen_closure_wrapper856\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_closure_wrapper856\n\t\t}\n\t});\n}\n__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => {\n\ttry {\n\t/* harmony import */ var WEBPACK_IMPORTED_MODULE_0 = __webpack_require__(/*! ./index_bg.js */ \"./gameboy/index_bg.js\");\n\tvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([WEBPACK_IMPORTED_MODULE_0]);\n\tvar [WEBPACK_IMPORTED_MODULE_0] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__;\n\tawait __webpack_require__.v(exports, module.id, \"ddcc0b23a70412fb67e0\", {\n\t\t\"./index_bg.js\": {\n\t\t\t\"__wbindgen_cb_drop\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_cb_drop,\n\t\t\t\"__wbg_log_5f8746597fe47331\": WEBPACK_IMPORTED_MODULE_0.__wbg_log_5f8746597fe47331,\n\t\t\t\"__wbg_instanceof_Window_42f092928baaee84\": WEBPACK_IMPORTED_MODULE_0.__wbg_instanceof_Window_42f092928baaee84,\n\t\t\t\"__wbg_document_15b2e504fb1556d6\": WEBPACK_IMPORTED_MODULE_0.__wbg_document_15b2e504fb1556d6,\n\t\t\t\"__wbg_requestAnimationFrame_9e5ccef32fec2b99\": WEBPACK_IMPORTED_MODULE_0.__wbg_requestAnimationFrame_9e5ccef32fec2b99,\n\t\t\t\"__wbg_createElement_28fc3740fb11defb\": WEBPACK_IMPORTED_MODULE_0.__wbg_createElement_28fc3740fb11defb,\n\t\t\t\"__wbg_getElementById_927eae2597d26692\": WEBPACK_IMPORTED_MODULE_0.__wbg_getElementById_927eae2597d26692,\n\t\t\t\"__wbg_addEventListener_b2c53f6c8c23bac8\": WEBPACK_IMPORTED_MODULE_0.__wbg_addEventListener_b2c53f6c8c23bac8,\n\t\t\t\"__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b\": WEBPACK_IMPORTED_MODULE_0.__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b,\n\t\t\t\"__wbg_setwidth_79da97dd2684789d\": WEBPACK_IMPORTED_MODULE_0.__wbg_setwidth_79da97dd2684789d,\n\t\t\t\"__wbg_setheight_d1ec9b4faad45a42\": WEBPACK_IMPORTED_MODULE_0.__wbg_setheight_d1ec9b4faad45a42,\n\t\t\t\"__wbg_getContext_efe7e95b72348104\": WEBPACK_IMPORTED_MODULE_0.__wbg_getContext_efe7e95b72348104,\n\t\t\t\"__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed\": WEBPACK_IMPORTED_MODULE_0.__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed,\n\t\t\t\"__wbg_keyCode_3075e448a1211124\": WEBPACK_IMPORTED_MODULE_0.__wbg_keyCode_3075e448a1211124,\n\t\t\t\"__wbg_appendChild_d21bac021b5bbfde\": WEBPACK_IMPORTED_MODULE_0.__wbg_appendChild_d21bac021b5bbfde,\n\t\t\t\"__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773\": WEBPACK_IMPORTED_MODULE_0.__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773,\n\t\t\t\"__wbg_putImageData_b6835d76d1cb45dd\": WEBPACK_IMPORTED_MODULE_0.__wbg_putImageData_b6835d76d1cb45dd,\n\t\t\t\"__wbg_newnoargs_971e9a5abe185139\": WEBPACK_IMPORTED_MODULE_0.__wbg_newnoargs_971e9a5abe185139,\n\t\t\t\"__wbg_call_33d7bcddbbfa394a\": WEBPACK_IMPORTED_MODULE_0.__wbg_call_33d7bcddbbfa394a,\n\t\t\t\"__wbg_call_65af9f665ab6ade5\": WEBPACK_IMPORTED_MODULE_0.__wbg_call_65af9f665ab6ade5,\n\t\t\t\"__wbg_new_52205195aa880fc2\": WEBPACK_IMPORTED_MODULE_0.__wbg_new_52205195aa880fc2,\n\t\t\t\"__wbg_resolve_0107b3a501450ba0\": WEBPACK_IMPORTED_MODULE_0.__wbg_resolve_0107b3a501450ba0,\n\t\t\t\"__wbg_then_18da6e5453572fc8\": WEBPACK_IMPORTED_MODULE_0.__wbg_then_18da6e5453572fc8,\n\t\t\t\"__wbg_globalThis_3348936ac49df00a\": WEBPACK_IMPORTED_MODULE_0.__wbg_globalThis_3348936ac49df00a,\n\t\t\t\"__wbg_self_fd00a1ef86d1b2ed\": WEBPACK_IMPORTED_MODULE_0.__wbg_self_fd00a1ef86d1b2ed,\n\t\t\t\"__wbg_window_6f6e346d8bbd61d7\": WEBPACK_IMPORTED_MODULE_0.__wbg_window_6f6e346d8bbd61d7,\n\t\t\t\"__wbg_global_67175caf56f55ca9\": WEBPACK_IMPORTED_MODULE_0.__wbg_global_67175caf56f55ca9,\n\t\t\t\"__wbindgen_is_undefined\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_is_undefined,\n\t\t\t\"__wbindgen_object_clone_ref\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_object_clone_ref,\n\t\t\t\"__wbindgen_object_drop_ref\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_object_drop_ref,\n\t\t\t\"__wbg_error_09919627ac0992f5\": WEBPACK_IMPORTED_MODULE_0.__wbg_error_09919627ac0992f5,\n\t\t\t\"__wbg_new_693216e109162396\": WEBPACK_IMPORTED_MODULE_0.__wbg_new_693216e109162396,\n\t\t\t\"__wbg_stack_0ddaca5d1abfb52f\": WEBPACK_IMPORTED_MODULE_0.__wbg_stack_0ddaca5d1abfb52f,\n\t\t\t\"__wbindgen_debug_string\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_debug_string,\n\t\t\t\"__wbindgen_throw\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_throw,\n\t\t\t\"__wbindgen_closure_wrapper671\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_closure_wrapper671,\n\t\t\t\"__wbindgen_closure_wrapper673\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_closure_wrapper673,\n\t\t\t\"__wbindgen_closure_wrapper856\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_closure_wrapper856\n\t\t}\n\t});\n\t__webpack_async_result__();\n\t} catch(e) { __webpack_async_result__(e); }\n}, 1);\n\n//# sourceURL=webpack:///./gameboy/index_bg.wasm?"); +eval("var __webpack_instantiate__ = ([WEBPACK_IMPORTED_MODULE_0]) => {\n\treturn __webpack_require__.v(exports, module.id, \"d7c3022a5540b3fd36e6\", {\n\t\t\"./index_bg.js\": {\n\t\t\t\"__wbg_log_7bbf821c47ebf2ae\": WEBPACK_IMPORTED_MODULE_0.__wbg_log_7bbf821c47ebf2ae,\n\t\t\t\"__wbindgen_cb_drop\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_cb_drop,\n\t\t\t\"__wbg_instanceof_Window_42f092928baaee84\": WEBPACK_IMPORTED_MODULE_0.__wbg_instanceof_Window_42f092928baaee84,\n\t\t\t\"__wbg_document_15b2e504fb1556d6\": WEBPACK_IMPORTED_MODULE_0.__wbg_document_15b2e504fb1556d6,\n\t\t\t\"__wbg_requestAnimationFrame_9e5ccef32fec2b99\": WEBPACK_IMPORTED_MODULE_0.__wbg_requestAnimationFrame_9e5ccef32fec2b99,\n\t\t\t\"__wbg_createElement_28fc3740fb11defb\": WEBPACK_IMPORTED_MODULE_0.__wbg_createElement_28fc3740fb11defb,\n\t\t\t\"__wbg_getElementById_927eae2597d26692\": WEBPACK_IMPORTED_MODULE_0.__wbg_getElementById_927eae2597d26692,\n\t\t\t\"__wbg_addEventListener_b2c53f6c8c23bac8\": WEBPACK_IMPORTED_MODULE_0.__wbg_addEventListener_b2c53f6c8c23bac8,\n\t\t\t\"__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b\": WEBPACK_IMPORTED_MODULE_0.__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b,\n\t\t\t\"__wbg_setwidth_79da97dd2684789d\": WEBPACK_IMPORTED_MODULE_0.__wbg_setwidth_79da97dd2684789d,\n\t\t\t\"__wbg_setheight_d1ec9b4faad45a42\": WEBPACK_IMPORTED_MODULE_0.__wbg_setheight_d1ec9b4faad45a42,\n\t\t\t\"__wbg_getContext_efe7e95b72348104\": WEBPACK_IMPORTED_MODULE_0.__wbg_getContext_efe7e95b72348104,\n\t\t\t\"__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed\": WEBPACK_IMPORTED_MODULE_0.__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed,\n\t\t\t\"__wbg_keyCode_3075e448a1211124\": WEBPACK_IMPORTED_MODULE_0.__wbg_keyCode_3075e448a1211124,\n\t\t\t\"__wbg_appendChild_d21bac021b5bbfde\": WEBPACK_IMPORTED_MODULE_0.__wbg_appendChild_d21bac021b5bbfde,\n\t\t\t\"__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773\": WEBPACK_IMPORTED_MODULE_0.__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773,\n\t\t\t\"__wbg_putImageData_b6835d76d1cb45dd\": WEBPACK_IMPORTED_MODULE_0.__wbg_putImageData_b6835d76d1cb45dd,\n\t\t\t\"__wbg_newnoargs_971e9a5abe185139\": WEBPACK_IMPORTED_MODULE_0.__wbg_newnoargs_971e9a5abe185139,\n\t\t\t\"__wbg_call_33d7bcddbbfa394a\": WEBPACK_IMPORTED_MODULE_0.__wbg_call_33d7bcddbbfa394a,\n\t\t\t\"__wbg_call_65af9f665ab6ade5\": WEBPACK_IMPORTED_MODULE_0.__wbg_call_65af9f665ab6ade5,\n\t\t\t\"__wbg_new_52205195aa880fc2\": WEBPACK_IMPORTED_MODULE_0.__wbg_new_52205195aa880fc2,\n\t\t\t\"__wbg_resolve_0107b3a501450ba0\": WEBPACK_IMPORTED_MODULE_0.__wbg_resolve_0107b3a501450ba0,\n\t\t\t\"__wbg_then_18da6e5453572fc8\": WEBPACK_IMPORTED_MODULE_0.__wbg_then_18da6e5453572fc8,\n\t\t\t\"__wbg_globalThis_3348936ac49df00a\": WEBPACK_IMPORTED_MODULE_0.__wbg_globalThis_3348936ac49df00a,\n\t\t\t\"__wbg_self_fd00a1ef86d1b2ed\": WEBPACK_IMPORTED_MODULE_0.__wbg_self_fd00a1ef86d1b2ed,\n\t\t\t\"__wbg_window_6f6e346d8bbd61d7\": WEBPACK_IMPORTED_MODULE_0.__wbg_window_6f6e346d8bbd61d7,\n\t\t\t\"__wbg_global_67175caf56f55ca9\": WEBPACK_IMPORTED_MODULE_0.__wbg_global_67175caf56f55ca9,\n\t\t\t\"__wbindgen_is_undefined\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_is_undefined,\n\t\t\t\"__wbindgen_object_clone_ref\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_object_clone_ref,\n\t\t\t\"__wbindgen_object_drop_ref\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_object_drop_ref,\n\t\t\t\"__wbg_error_09919627ac0992f5\": WEBPACK_IMPORTED_MODULE_0.__wbg_error_09919627ac0992f5,\n\t\t\t\"__wbg_new_693216e109162396\": WEBPACK_IMPORTED_MODULE_0.__wbg_new_693216e109162396,\n\t\t\t\"__wbg_stack_0ddaca5d1abfb52f\": WEBPACK_IMPORTED_MODULE_0.__wbg_stack_0ddaca5d1abfb52f,\n\t\t\t\"__wbindgen_debug_string\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_debug_string,\n\t\t\t\"__wbindgen_throw\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_throw,\n\t\t\t\"__wbindgen_closure_wrapper250\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_closure_wrapper250,\n\t\t\t\"__wbindgen_closure_wrapper252\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_closure_wrapper252,\n\t\t\t\"__wbindgen_closure_wrapper867\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_closure_wrapper867\n\t\t}\n\t});\n}\n__webpack_require__.a(module, async (__webpack_handle_async_dependencies__, __webpack_async_result__) => {\n\ttry {\n\t/* harmony import */ var WEBPACK_IMPORTED_MODULE_0 = __webpack_require__(/*! ./index_bg.js */ \"./gameboy/index_bg.js\");\n\tvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([WEBPACK_IMPORTED_MODULE_0]);\n\tvar [WEBPACK_IMPORTED_MODULE_0] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__;\n\tawait __webpack_require__.v(exports, module.id, \"d7c3022a5540b3fd36e6\", {\n\t\t\"./index_bg.js\": {\n\t\t\t\"__wbg_log_7bbf821c47ebf2ae\": WEBPACK_IMPORTED_MODULE_0.__wbg_log_7bbf821c47ebf2ae,\n\t\t\t\"__wbindgen_cb_drop\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_cb_drop,\n\t\t\t\"__wbg_instanceof_Window_42f092928baaee84\": WEBPACK_IMPORTED_MODULE_0.__wbg_instanceof_Window_42f092928baaee84,\n\t\t\t\"__wbg_document_15b2e504fb1556d6\": WEBPACK_IMPORTED_MODULE_0.__wbg_document_15b2e504fb1556d6,\n\t\t\t\"__wbg_requestAnimationFrame_9e5ccef32fec2b99\": WEBPACK_IMPORTED_MODULE_0.__wbg_requestAnimationFrame_9e5ccef32fec2b99,\n\t\t\t\"__wbg_createElement_28fc3740fb11defb\": WEBPACK_IMPORTED_MODULE_0.__wbg_createElement_28fc3740fb11defb,\n\t\t\t\"__wbg_getElementById_927eae2597d26692\": WEBPACK_IMPORTED_MODULE_0.__wbg_getElementById_927eae2597d26692,\n\t\t\t\"__wbg_addEventListener_b2c53f6c8c23bac8\": WEBPACK_IMPORTED_MODULE_0.__wbg_addEventListener_b2c53f6c8c23bac8,\n\t\t\t\"__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b\": WEBPACK_IMPORTED_MODULE_0.__wbg_instanceof_HtmlCanvasElement_9f56aef8c479066b,\n\t\t\t\"__wbg_setwidth_79da97dd2684789d\": WEBPACK_IMPORTED_MODULE_0.__wbg_setwidth_79da97dd2684789d,\n\t\t\t\"__wbg_setheight_d1ec9b4faad45a42\": WEBPACK_IMPORTED_MODULE_0.__wbg_setheight_d1ec9b4faad45a42,\n\t\t\t\"__wbg_getContext_efe7e95b72348104\": WEBPACK_IMPORTED_MODULE_0.__wbg_getContext_efe7e95b72348104,\n\t\t\t\"__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed\": WEBPACK_IMPORTED_MODULE_0.__wbg_newwithu8clampedarrayandsh_67cfbae8df523bed,\n\t\t\t\"__wbg_keyCode_3075e448a1211124\": WEBPACK_IMPORTED_MODULE_0.__wbg_keyCode_3075e448a1211124,\n\t\t\t\"__wbg_appendChild_d21bac021b5bbfde\": WEBPACK_IMPORTED_MODULE_0.__wbg_appendChild_d21bac021b5bbfde,\n\t\t\t\"__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773\": WEBPACK_IMPORTED_MODULE_0.__wbg_instanceof_CanvasRenderingContext2d_10bb8c4425aab773,\n\t\t\t\"__wbg_putImageData_b6835d76d1cb45dd\": WEBPACK_IMPORTED_MODULE_0.__wbg_putImageData_b6835d76d1cb45dd,\n\t\t\t\"__wbg_newnoargs_971e9a5abe185139\": WEBPACK_IMPORTED_MODULE_0.__wbg_newnoargs_971e9a5abe185139,\n\t\t\t\"__wbg_call_33d7bcddbbfa394a\": WEBPACK_IMPORTED_MODULE_0.__wbg_call_33d7bcddbbfa394a,\n\t\t\t\"__wbg_call_65af9f665ab6ade5\": WEBPACK_IMPORTED_MODULE_0.__wbg_call_65af9f665ab6ade5,\n\t\t\t\"__wbg_new_52205195aa880fc2\": WEBPACK_IMPORTED_MODULE_0.__wbg_new_52205195aa880fc2,\n\t\t\t\"__wbg_resolve_0107b3a501450ba0\": WEBPACK_IMPORTED_MODULE_0.__wbg_resolve_0107b3a501450ba0,\n\t\t\t\"__wbg_then_18da6e5453572fc8\": WEBPACK_IMPORTED_MODULE_0.__wbg_then_18da6e5453572fc8,\n\t\t\t\"__wbg_globalThis_3348936ac49df00a\": WEBPACK_IMPORTED_MODULE_0.__wbg_globalThis_3348936ac49df00a,\n\t\t\t\"__wbg_self_fd00a1ef86d1b2ed\": WEBPACK_IMPORTED_MODULE_0.__wbg_self_fd00a1ef86d1b2ed,\n\t\t\t\"__wbg_window_6f6e346d8bbd61d7\": WEBPACK_IMPORTED_MODULE_0.__wbg_window_6f6e346d8bbd61d7,\n\t\t\t\"__wbg_global_67175caf56f55ca9\": WEBPACK_IMPORTED_MODULE_0.__wbg_global_67175caf56f55ca9,\n\t\t\t\"__wbindgen_is_undefined\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_is_undefined,\n\t\t\t\"__wbindgen_object_clone_ref\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_object_clone_ref,\n\t\t\t\"__wbindgen_object_drop_ref\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_object_drop_ref,\n\t\t\t\"__wbg_error_09919627ac0992f5\": WEBPACK_IMPORTED_MODULE_0.__wbg_error_09919627ac0992f5,\n\t\t\t\"__wbg_new_693216e109162396\": WEBPACK_IMPORTED_MODULE_0.__wbg_new_693216e109162396,\n\t\t\t\"__wbg_stack_0ddaca5d1abfb52f\": WEBPACK_IMPORTED_MODULE_0.__wbg_stack_0ddaca5d1abfb52f,\n\t\t\t\"__wbindgen_debug_string\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_debug_string,\n\t\t\t\"__wbindgen_throw\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_throw,\n\t\t\t\"__wbindgen_closure_wrapper250\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_closure_wrapper250,\n\t\t\t\"__wbindgen_closure_wrapper252\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_closure_wrapper252,\n\t\t\t\"__wbindgen_closure_wrapper867\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_closure_wrapper867\n\t\t}\n\t});\n\t__webpack_async_result__();\n\t} catch(e) { __webpack_async_result__(e); }\n}, 1);\n\n//# sourceURL=webpack:///./gameboy/index_bg.wasm?"); /***/ }) diff --git a/src/gameboy.rs b/src/gameboy.rs index ce1ae88..1a84356 100644 --- a/src/gameboy.rs +++ b/src/gameboy.rs @@ -17,6 +17,7 @@ pub enum RenderMode { #[cfg(not(target_arch = "wasm32"))] Terminal, #[cfg(target_arch = "wasm32")] + #[default] WebAssembly, } diff --git a/src/mbc/mbc1.rs b/src/mbc/mbc1.rs index f2c21ef..bbd1802 100644 --- a/src/mbc/mbc1.rs +++ b/src/mbc/mbc1.rs @@ -40,6 +40,7 @@ impl MBC1 { res.loadram().map(|_| res) } + #[allow(dead_code)] pub fn new_without_save(data: Vec) -> StrResult { let (svpath, rambanks) = match data[0x147] { 0x02 => (None, ram_banks(data[0x149])), diff --git a/src/mbc/mbc3.rs b/src/mbc/mbc3.rs index 51133a7..30433b6 100644 --- a/src/mbc/mbc3.rs +++ b/src/mbc/mbc3.rs @@ -52,6 +52,38 @@ impl MBC3 { res.loadram().map(|_| res) } + pub fn new_without_save(data: Vec) -> StrResult { + let subtype = data[0x147]; + let svpath = match subtype { + // 0x0F | 0x10 | 0x13 => Some(file.with_extension("gbsave")), + _ => None, + }; + let rambanks = match subtype { + 0x10 | 0x12 | 0x13 => ram_banks(data[0x149]), + _ => 0, + }; + let ramsize = rambanks * 0x2000; + let rtc = match subtype { + 0x0F | 0x10 => Some(0), + _ => None, + }; + + let mut res = MBC3 { + rom: data, + ram: ::std::iter::repeat(0u8).take(ramsize).collect(), + rombank: 1, + rambank: 0, + rambanks, + selectrtc: false, + ram_on: false, + savepath: svpath, + rtc_ram: [0u8; 5], + rtc_ram_latch: [0u8; 5], + rtc_zero: rtc, + }; + res.loadram().map(|_| res) + } + fn loadram(&mut self) -> StrResult<()> { match self.savepath { None => Ok(()), diff --git a/src/mbc/mod.rs b/src/mbc/mod.rs index d7253ba..e441454 100644 --- a/src/mbc/mod.rs +++ b/src/mbc/mod.rs @@ -41,7 +41,7 @@ pub fn get_mbc( filepath: Option, ) -> StrResult> { if filepath.is_none() { - return mbc1::MBC1::new_without_save(data).map(|v| Box::new(v) as Box); + return mbc3::MBC3::new_without_save(data).map(|v| Box::new(v) as Box); } let file = filepath.unwrap(); @@ -81,6 +81,7 @@ fn rom_banks(v: u8) -> usize { } } +#[allow(dead_code)] fn check_checksum(data: &[u8]) -> StrResult<()> { let mut value: u8 = 0; for i in 0x134..0x14D { diff --git a/src/mmu/mmu.rs b/src/mmu/mmu.rs index c444654..d7f8ba6 100644 --- a/src/mmu/mmu.rs +++ b/src/mmu/mmu.rs @@ -58,6 +58,7 @@ fn fill_random(slice: &mut [u8], start: u32) { impl<'a> MMU<'a> { pub fn new(data: Vec, file: Option) -> StrResult> { let mmu_mbc = mbc::get_mbc(data, file)?; + let serial = Serial::new(); let mut res = MMU { wram: [0; WRAM_SIZE], diff --git a/src/mmu/mod.rs b/src/mmu/mod.rs index 88367ca..abefd86 100644 --- a/src/mmu/mod.rs +++ b/src/mmu/mod.rs @@ -1,4 +1,3 @@ pub mod mmu; -mod rtc; mod serial; mod timer; diff --git a/src/mmu/rtc.rs b/src/mmu/rtc.rs deleted file mode 100644 index bb69784..0000000 --- a/src/mmu/rtc.rs +++ /dev/null @@ -1,105 +0,0 @@ -// * https://github.com/alexcrichton/jba/tree/rust - -#[derive(Debug)] -pub struct Rtc { - pub current: u8, - pub regs: [u8; 8], - - s: u8, - m: u8, - h: u8, - d: u16, - t: u8, - carry: u8, - stop: u8, - readylatch: bool, -} - -impl Rtc { - pub fn new() -> Rtc { - Rtc { - s: 0, - m: 0, - h: 0, - d: 0, - t: 0, - carry: 0, - current: 0, - regs: [0; 8], - stop: 0, - readylatch: false, - } - } - - pub fn latch(&mut self, value: u8) { - if self.readylatch { - if value == 1 { - self.regs[0] = self.s; - self.regs[1] = self.m; - self.regs[2] = self.h; - self.regs[3] = self.d as u8; - self.regs[4] = - ((self.d >> 8) as u8) | (self.stop << 6) | (self.carry << 7); - self.regs[5] = 0xff; - self.regs[6] = 0xff; - self.regs[7] = 0xff; - } - self.readylatch = false; - } else { - self.readylatch = value == 0; - } - } - - pub fn wb(&mut self, _addr: u16, value: u8) { - match self.current & 0x7 { - 0 => { - self.s = value % 60; - self.regs[0] = self.s; - } - 1 => { - self.m = value % 60; - self.regs[1] = self.m; - } - 2 => { - self.h = value % 24; - self.regs[2] = self.h; - } - 3 => { - self.regs[3] = value; - self.d = (self.d & 0x100) | (value as u16); - } - 4 => { - self.regs[4] = value; - self.d = (self.d & 0xff) | (((value as u16) & 1) << 8); - self.stop = (value >> 6) & 1; - self.carry = (value >> 7) & 1; - } - _ => {} - } - } - - #[allow(dead_code)] - pub fn step(&mut self) { - if self.stop != 0 { - return; - } - - self.t += 1; - if self.t >= 60 { - self.s += 1; - if self.s >= 60 { - self.m += 1; - if self.m >= 60 { - self.d += 1; - if self.d >= 365 { - self.d = 0; - self.carry = 1; - } - self.m = 0; - } - self.s = 0; - } - self.t = 0; - } - } -} diff --git a/src/screen/desktop.rs b/src/screen/desktop.rs index c018b9c..81735d7 100644 --- a/src/screen/desktop.rs +++ b/src/screen/desktop.rs @@ -15,12 +15,19 @@ use gl::types::*; use glutin::event::{ElementState, VirtualKeyCode}; pub struct Glcx { + #[allow(unused)] tex: GLuint, + #[allow(unused)] program: GLuint, + #[allow(unused)] frag: GLuint, + #[allow(unused)] vert: GLuint, + #[allow(unused)] ebo: GLuint, + #[allow(unused)] vbo: GLuint, + #[allow(unused)] vao: GLuint, } @@ -271,6 +278,7 @@ impl Glcx { } } + #[allow(dead_code)] unsafe fn check_program_link(_gl: &Glcx, program: GLuint) { let mut status = gl::FALSE as GLint; gl::GetProgramiv(program, gl::LINK_STATUS, &mut status); diff --git a/src/screen/web.rs b/src/screen/web.rs index 493c965..918ac31 100644 --- a/src/screen/web.rs +++ b/src/screen/web.rs @@ -24,6 +24,7 @@ fn window() -> web_sys::Window { web_sys::window().expect("no global `window` exists") } +#[allow(unused)] fn add_event_listener(listener: &str, f: &Closure) { window() .add_event_listener_with_callback(listener, f.as_ref().unchecked_ref())