diff --git a/docs/binjnes-simd.js b/docs/binjnes-simd.js index 54d1ebd..ccf9d9c 100644 --- a/docs/binjnes-simd.js +++ b/docs/binjnes-simd.js @@ -6,7 +6,7 @@ var BinjnesSimd = (() => { function(BinjnesSimd) { BinjnesSimd = BinjnesSimd || {}; -var Module=typeof BinjnesSimd!="undefined"?BinjnesSimd:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="binjnes-simd.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["h"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["t"];addOnInit(Module["asm"]["i"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);readyPromiseReject(e)}}instantiateAsync().catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function _fd_close(fd){return 52}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){return 70}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0}var asmLibraryArg={"a":_abort,"f":_emscripten_memcpy_big,"d":_emscripten_resize_heap,"g":_exit,"e":_fd_close,"c":_fd_seek,"b":_fd_write};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["i"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["j"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["k"]).apply(null,arguments)};var _emulator_delete=Module["_emulator_delete"]=function(){return(_emulator_delete=Module["_emulator_delete"]=Module["asm"]["l"]).apply(null,arguments)};var _emulator_set_reset=Module["_emulator_set_reset"]=function(){return(_emulator_set_reset=Module["_emulator_set_reset"]=Module["asm"]["m"]).apply(null,arguments)};var _emulator_read_state=Module["_emulator_read_state"]=function(){return(_emulator_read_state=Module["_emulator_read_state"]=Module["asm"]["n"]).apply(null,arguments)};var _emulator_write_state=Module["_emulator_write_state"]=function(){return(_emulator_write_state=Module["_emulator_write_state"]=Module["asm"]["o"]).apply(null,arguments)};var _emulator_was_prg_ram_updated=Module["_emulator_was_prg_ram_updated"]=function(){return(_emulator_was_prg_ram_updated=Module["_emulator_was_prg_ram_updated"]=Module["asm"]["p"]).apply(null,arguments)};var _emulator_read_prg_ram=Module["_emulator_read_prg_ram"]=function(){return(_emulator_read_prg_ram=Module["_emulator_read_prg_ram"]=Module["asm"]["q"]).apply(null,arguments)};var _emulator_write_prg_ram=Module["_emulator_write_prg_ram"]=function(){return(_emulator_write_prg_ram=Module["_emulator_write_prg_ram"]=Module["asm"]["r"]).apply(null,arguments)};var _file_data_delete=Module["_file_data_delete"]=function(){return(_file_data_delete=Module["_file_data_delete"]=Module["asm"]["s"]).apply(null,arguments)};var _joypad_delete=Module["_joypad_delete"]=function(){return(_joypad_delete=Module["_joypad_delete"]=Module["asm"]["u"]).apply(null,arguments)};var _joypad_begin_rewind_playback=Module["_joypad_begin_rewind_playback"]=function(){return(_joypad_begin_rewind_playback=Module["_joypad_begin_rewind_playback"]=Module["asm"]["v"]).apply(null,arguments)};var _joypad_end_rewind_playback=Module["_joypad_end_rewind_playback"]=function(){return(_joypad_end_rewind_playback=Module["_joypad_end_rewind_playback"]=Module["asm"]["w"]).apply(null,arguments)};var _rewind_append=Module["_rewind_append"]=function(){return(_rewind_append=Module["_rewind_append"]=Module["asm"]["x"]).apply(null,arguments)};var _rewind_delete=Module["_rewind_delete"]=function(){return(_rewind_delete=Module["_rewind_delete"]=Module["asm"]["y"]).apply(null,arguments)};var _emulator_new_simple=Module["_emulator_new_simple"]=function(){return(_emulator_new_simple=Module["_emulator_new_simple"]=Module["asm"]["z"]).apply(null,arguments)};var _emulator_get_ticks_f64=Module["_emulator_get_ticks_f64"]=function(){return(_emulator_get_ticks_f64=Module["_emulator_get_ticks_f64"]=Module["asm"]["A"]).apply(null,arguments)};var _emulator_run_until_f64=Module["_emulator_run_until_f64"]=function(){return(_emulator_run_until_f64=Module["_emulator_run_until_f64"]=Module["asm"]["B"]).apply(null,arguments)};var _rewind_get_newest_ticks_f64=Module["_rewind_get_newest_ticks_f64"]=function(){return(_rewind_get_newest_ticks_f64=Module["_rewind_get_newest_ticks_f64"]=Module["asm"]["C"]).apply(null,arguments)};var _rewind_get_oldest_ticks_f64=Module["_rewind_get_oldest_ticks_f64"]=function(){return(_rewind_get_oldest_ticks_f64=Module["_rewind_get_oldest_ticks_f64"]=Module["asm"]["D"]).apply(null,arguments)};var _joypad_new_simple=Module["_joypad_new_simple"]=function(){return(_joypad_new_simple=Module["_joypad_new_simple"]=Module["asm"]["E"]).apply(null,arguments)};var _set_joyp_up=Module["_set_joyp_up"]=function(){return(_set_joyp_up=Module["_set_joyp_up"]=Module["asm"]["F"]).apply(null,arguments)};var _set_joyp_down=Module["_set_joyp_down"]=function(){return(_set_joyp_down=Module["_set_joyp_down"]=Module["asm"]["G"]).apply(null,arguments)};var _set_joyp_left=Module["_set_joyp_left"]=function(){return(_set_joyp_left=Module["_set_joyp_left"]=Module["asm"]["H"]).apply(null,arguments)};var _set_joyp_right=Module["_set_joyp_right"]=function(){return(_set_joyp_right=Module["_set_joyp_right"]=Module["asm"]["I"]).apply(null,arguments)};var _set_joyp_B=Module["_set_joyp_B"]=function(){return(_set_joyp_B=Module["_set_joyp_B"]=Module["asm"]["J"]).apply(null,arguments)};var _set_joyp_A=Module["_set_joyp_A"]=function(){return(_set_joyp_A=Module["_set_joyp_A"]=Module["asm"]["K"]).apply(null,arguments)};var _set_joyp_start=Module["_set_joyp_start"]=function(){return(_set_joyp_start=Module["_set_joyp_start"]=Module["asm"]["L"]).apply(null,arguments)};var _set_joyp_select=Module["_set_joyp_select"]=function(){return(_set_joyp_select=Module["_set_joyp_select"]=Module["asm"]["M"]).apply(null,arguments)};var _set_zapper=Module["_set_zapper"]=function(){return(_set_zapper=Module["_set_zapper"]=Module["asm"]["N"]).apply(null,arguments)};var _add_snesmouse_delta=Module["_add_snesmouse_delta"]=function(){return(_add_snesmouse_delta=Module["_add_snesmouse_delta"]=Module["asm"]["O"]).apply(null,arguments)};var _set_snesmouse_buttons=Module["_set_snesmouse_buttons"]=function(){return(_set_snesmouse_buttons=Module["_set_snesmouse_buttons"]=Module["asm"]["P"]).apply(null,arguments)};var _set_controller_type=Module["_set_controller_type"]=function(){return(_set_controller_type=Module["_set_controller_type"]=Module["asm"]["Q"]).apply(null,arguments)};var _get_frame_buffer_ptr=Module["_get_frame_buffer_ptr"]=function(){return(_get_frame_buffer_ptr=Module["_get_frame_buffer_ptr"]=Module["asm"]["R"]).apply(null,arguments)};var _get_frame_buffer_size=Module["_get_frame_buffer_size"]=function(){return(_get_frame_buffer_size=Module["_get_frame_buffer_size"]=Module["asm"]["S"]).apply(null,arguments)};var _emulator_convert_frame_buffer_simple=Module["_emulator_convert_frame_buffer_simple"]=function(){return(_emulator_convert_frame_buffer_simple=Module["_emulator_convert_frame_buffer_simple"]=Module["asm"]["T"]).apply(null,arguments)};var _get_rgba_frame_buffer_ptr=Module["_get_rgba_frame_buffer_ptr"]=function(){return(_get_rgba_frame_buffer_ptr=Module["_get_rgba_frame_buffer_ptr"]=Module["asm"]["U"]).apply(null,arguments)};var _get_rgba_frame_buffer_size=Module["_get_rgba_frame_buffer_size"]=function(){return(_get_rgba_frame_buffer_size=Module["_get_rgba_frame_buffer_size"]=Module["asm"]["V"]).apply(null,arguments)};var _get_palette_ptr=Module["_get_palette_ptr"]=function(){return(_get_palette_ptr=Module["_get_palette_ptr"]=Module["asm"]["W"]).apply(null,arguments)};var _get_palette_size=Module["_get_palette_size"]=function(){return(_get_palette_size=Module["_get_palette_size"]=Module["asm"]["X"]).apply(null,arguments)};var _get_audio_buffer_ptr=Module["_get_audio_buffer_ptr"]=function(){return(_get_audio_buffer_ptr=Module["_get_audio_buffer_ptr"]=Module["asm"]["Y"]).apply(null,arguments)};var _get_audio_buffer_capacity=Module["_get_audio_buffer_capacity"]=function(){return(_get_audio_buffer_capacity=Module["_get_audio_buffer_capacity"]=Module["asm"]["Z"]).apply(null,arguments)};var _state_file_data_new=Module["_state_file_data_new"]=function(){return(_state_file_data_new=Module["_state_file_data_new"]=Module["asm"]["_"]).apply(null,arguments)};var _prg_ram_file_data_new=Module["_prg_ram_file_data_new"]=function(){return(_prg_ram_file_data_new=Module["_prg_ram_file_data_new"]=Module["asm"]["$"]).apply(null,arguments)};var _get_file_data_ptr=Module["_get_file_data_ptr"]=function(){return(_get_file_data_ptr=Module["_get_file_data_ptr"]=Module["asm"]["aa"]).apply(null,arguments)};var _get_file_data_size=Module["_get_file_data_size"]=function(){return(_get_file_data_size=Module["_get_file_data_size"]=Module["asm"]["ba"]).apply(null,arguments)};var _set_file_data_ptr=Module["_set_file_data_ptr"]=function(){return(_set_file_data_ptr=Module["_set_file_data_ptr"]=Module["asm"]["ca"]).apply(null,arguments)};var _set_file_data_size=Module["_set_file_data_size"]=function(){return(_set_file_data_size=Module["_set_file_data_size"]=Module["asm"]["da"]).apply(null,arguments)};var _file_data_delete2=Module["_file_data_delete2"]=function(){return(_file_data_delete2=Module["_file_data_delete2"]=Module["asm"]["ea"]).apply(null,arguments)};var _rewind_new_simple=Module["_rewind_new_simple"]=function(){return(_rewind_new_simple=Module["_rewind_new_simple"]=Module["asm"]["fa"]).apply(null,arguments)};var _rewind_begin=Module["_rewind_begin"]=function(){return(_rewind_begin=Module["_rewind_begin"]=Module["asm"]["ga"]).apply(null,arguments)};var _rewind_to_ticks_wrapper=Module["_rewind_to_ticks_wrapper"]=function(){return(_rewind_to_ticks_wrapper=Module["_rewind_to_ticks_wrapper"]=Module["asm"]["ha"]).apply(null,arguments)};var _rewind_end=Module["_rewind_end"]=function(){return(_rewind_end=Module["_rewind_end"]=Module["asm"]["ia"]).apply(null,arguments)};var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); +var Module=typeof BinjnesSimd!="undefined"?BinjnesSimd:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="binjnes-simd.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["h"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["t"];addOnInit(Module["asm"]["i"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);readyPromiseReject(e)}}instantiateAsync().catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function _fd_close(fd){return 52}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){return 70}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0}var asmLibraryArg={"a":_abort,"f":_emscripten_memcpy_big,"d":_emscripten_resize_heap,"g":_exit,"e":_fd_close,"c":_fd_seek,"b":_fd_write};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["i"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["j"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["k"]).apply(null,arguments)};var _emulator_delete=Module["_emulator_delete"]=function(){return(_emulator_delete=Module["_emulator_delete"]=Module["asm"]["l"]).apply(null,arguments)};var _emulator_set_reset=Module["_emulator_set_reset"]=function(){return(_emulator_set_reset=Module["_emulator_set_reset"]=Module["asm"]["m"]).apply(null,arguments)};var _emulator_read_state=Module["_emulator_read_state"]=function(){return(_emulator_read_state=Module["_emulator_read_state"]=Module["asm"]["n"]).apply(null,arguments)};var _emulator_write_state=Module["_emulator_write_state"]=function(){return(_emulator_write_state=Module["_emulator_write_state"]=Module["asm"]["o"]).apply(null,arguments)};var _emulator_was_prg_ram_updated=Module["_emulator_was_prg_ram_updated"]=function(){return(_emulator_was_prg_ram_updated=Module["_emulator_was_prg_ram_updated"]=Module["asm"]["p"]).apply(null,arguments)};var _emulator_read_prg_ram=Module["_emulator_read_prg_ram"]=function(){return(_emulator_read_prg_ram=Module["_emulator_read_prg_ram"]=Module["asm"]["q"]).apply(null,arguments)};var _emulator_write_prg_ram=Module["_emulator_write_prg_ram"]=function(){return(_emulator_write_prg_ram=Module["_emulator_write_prg_ram"]=Module["asm"]["r"]).apply(null,arguments)};var _file_data_delete=Module["_file_data_delete"]=function(){return(_file_data_delete=Module["_file_data_delete"]=Module["asm"]["s"]).apply(null,arguments)};var _joypad_delete=Module["_joypad_delete"]=function(){return(_joypad_delete=Module["_joypad_delete"]=Module["asm"]["u"]).apply(null,arguments)};var _joypad_begin_rewind_playback=Module["_joypad_begin_rewind_playback"]=function(){return(_joypad_begin_rewind_playback=Module["_joypad_begin_rewind_playback"]=Module["asm"]["v"]).apply(null,arguments)};var _joypad_end_rewind_playback=Module["_joypad_end_rewind_playback"]=function(){return(_joypad_end_rewind_playback=Module["_joypad_end_rewind_playback"]=Module["asm"]["w"]).apply(null,arguments)};var _rewind_append=Module["_rewind_append"]=function(){return(_rewind_append=Module["_rewind_append"]=Module["asm"]["x"]).apply(null,arguments)};var _rewind_delete=Module["_rewind_delete"]=function(){return(_rewind_delete=Module["_rewind_delete"]=Module["asm"]["y"]).apply(null,arguments)};var _emulator_new_simple=Module["_emulator_new_simple"]=function(){return(_emulator_new_simple=Module["_emulator_new_simple"]=Module["asm"]["z"]).apply(null,arguments)};var _emulator_get_secs=Module["_emulator_get_secs"]=function(){return(_emulator_get_secs=Module["_emulator_get_secs"]=Module["asm"]["A"]).apply(null,arguments)};var _emulator_run_until_secs=Module["_emulator_run_until_secs"]=function(){return(_emulator_run_until_secs=Module["_emulator_run_until_secs"]=Module["asm"]["B"]).apply(null,arguments)};var _rewind_get_newest_secs=Module["_rewind_get_newest_secs"]=function(){return(_rewind_get_newest_secs=Module["_rewind_get_newest_secs"]=Module["asm"]["C"]).apply(null,arguments)};var _rewind_get_oldest_secs=Module["_rewind_get_oldest_secs"]=function(){return(_rewind_get_oldest_secs=Module["_rewind_get_oldest_secs"]=Module["asm"]["D"]).apply(null,arguments)};var _joypad_new_simple=Module["_joypad_new_simple"]=function(){return(_joypad_new_simple=Module["_joypad_new_simple"]=Module["asm"]["E"]).apply(null,arguments)};var _set_joyp_up=Module["_set_joyp_up"]=function(){return(_set_joyp_up=Module["_set_joyp_up"]=Module["asm"]["F"]).apply(null,arguments)};var _set_joyp_down=Module["_set_joyp_down"]=function(){return(_set_joyp_down=Module["_set_joyp_down"]=Module["asm"]["G"]).apply(null,arguments)};var _set_joyp_left=Module["_set_joyp_left"]=function(){return(_set_joyp_left=Module["_set_joyp_left"]=Module["asm"]["H"]).apply(null,arguments)};var _set_joyp_right=Module["_set_joyp_right"]=function(){return(_set_joyp_right=Module["_set_joyp_right"]=Module["asm"]["I"]).apply(null,arguments)};var _set_joyp_B=Module["_set_joyp_B"]=function(){return(_set_joyp_B=Module["_set_joyp_B"]=Module["asm"]["J"]).apply(null,arguments)};var _set_joyp_A=Module["_set_joyp_A"]=function(){return(_set_joyp_A=Module["_set_joyp_A"]=Module["asm"]["K"]).apply(null,arguments)};var _set_joyp_start=Module["_set_joyp_start"]=function(){return(_set_joyp_start=Module["_set_joyp_start"]=Module["asm"]["L"]).apply(null,arguments)};var _set_joyp_select=Module["_set_joyp_select"]=function(){return(_set_joyp_select=Module["_set_joyp_select"]=Module["asm"]["M"]).apply(null,arguments)};var _set_zapper=Module["_set_zapper"]=function(){return(_set_zapper=Module["_set_zapper"]=Module["asm"]["N"]).apply(null,arguments)};var _add_snesmouse_delta=Module["_add_snesmouse_delta"]=function(){return(_add_snesmouse_delta=Module["_add_snesmouse_delta"]=Module["asm"]["O"]).apply(null,arguments)};var _set_snesmouse_buttons=Module["_set_snesmouse_buttons"]=function(){return(_set_snesmouse_buttons=Module["_set_snesmouse_buttons"]=Module["asm"]["P"]).apply(null,arguments)};var _set_controller_type=Module["_set_controller_type"]=function(){return(_set_controller_type=Module["_set_controller_type"]=Module["asm"]["Q"]).apply(null,arguments)};var _get_frame_buffer_ptr=Module["_get_frame_buffer_ptr"]=function(){return(_get_frame_buffer_ptr=Module["_get_frame_buffer_ptr"]=Module["asm"]["R"]).apply(null,arguments)};var _get_frame_buffer_size=Module["_get_frame_buffer_size"]=function(){return(_get_frame_buffer_size=Module["_get_frame_buffer_size"]=Module["asm"]["S"]).apply(null,arguments)};var _emulator_convert_frame_buffer_simple=Module["_emulator_convert_frame_buffer_simple"]=function(){return(_emulator_convert_frame_buffer_simple=Module["_emulator_convert_frame_buffer_simple"]=Module["asm"]["T"]).apply(null,arguments)};var _get_rgba_frame_buffer_ptr=Module["_get_rgba_frame_buffer_ptr"]=function(){return(_get_rgba_frame_buffer_ptr=Module["_get_rgba_frame_buffer_ptr"]=Module["asm"]["U"]).apply(null,arguments)};var _get_rgba_frame_buffer_size=Module["_get_rgba_frame_buffer_size"]=function(){return(_get_rgba_frame_buffer_size=Module["_get_rgba_frame_buffer_size"]=Module["asm"]["V"]).apply(null,arguments)};var _get_palette_ptr=Module["_get_palette_ptr"]=function(){return(_get_palette_ptr=Module["_get_palette_ptr"]=Module["asm"]["W"]).apply(null,arguments)};var _get_palette_size=Module["_get_palette_size"]=function(){return(_get_palette_size=Module["_get_palette_size"]=Module["asm"]["X"]).apply(null,arguments)};var _get_audio_buffer_ptr=Module["_get_audio_buffer_ptr"]=function(){return(_get_audio_buffer_ptr=Module["_get_audio_buffer_ptr"]=Module["asm"]["Y"]).apply(null,arguments)};var _get_audio_buffer_capacity=Module["_get_audio_buffer_capacity"]=function(){return(_get_audio_buffer_capacity=Module["_get_audio_buffer_capacity"]=Module["asm"]["Z"]).apply(null,arguments)};var _state_file_data_new=Module["_state_file_data_new"]=function(){return(_state_file_data_new=Module["_state_file_data_new"]=Module["asm"]["_"]).apply(null,arguments)};var _prg_ram_file_data_new=Module["_prg_ram_file_data_new"]=function(){return(_prg_ram_file_data_new=Module["_prg_ram_file_data_new"]=Module["asm"]["$"]).apply(null,arguments)};var _get_file_data_ptr=Module["_get_file_data_ptr"]=function(){return(_get_file_data_ptr=Module["_get_file_data_ptr"]=Module["asm"]["aa"]).apply(null,arguments)};var _get_file_data_size=Module["_get_file_data_size"]=function(){return(_get_file_data_size=Module["_get_file_data_size"]=Module["asm"]["ba"]).apply(null,arguments)};var _set_file_data_ptr=Module["_set_file_data_ptr"]=function(){return(_set_file_data_ptr=Module["_set_file_data_ptr"]=Module["asm"]["ca"]).apply(null,arguments)};var _set_file_data_size=Module["_set_file_data_size"]=function(){return(_set_file_data_size=Module["_set_file_data_size"]=Module["asm"]["da"]).apply(null,arguments)};var _file_data_delete2=Module["_file_data_delete2"]=function(){return(_file_data_delete2=Module["_file_data_delete2"]=Module["asm"]["ea"]).apply(null,arguments)};var _rewind_new_simple=Module["_rewind_new_simple"]=function(){return(_rewind_new_simple=Module["_rewind_new_simple"]=Module["asm"]["fa"]).apply(null,arguments)};var _rewind_begin=Module["_rewind_begin"]=function(){return(_rewind_begin=Module["_rewind_begin"]=Module["asm"]["ga"]).apply(null,arguments)};var _rewind_to_secs=Module["_rewind_to_secs"]=function(){return(_rewind_to_secs=Module["_rewind_to_secs"]=Module["asm"]["ha"]).apply(null,arguments)};var _rewind_end=Module["_rewind_end"]=function(){return(_rewind_end=Module["_rewind_end"]=Module["asm"]["ia"]).apply(null,arguments)};var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); return BinjnesSimd.ready diff --git a/docs/binjnes-simd.wasm b/docs/binjnes-simd.wasm index baa42fb..f3fc0a1 100755 Binary files a/docs/binjnes-simd.wasm and b/docs/binjnes-simd.wasm differ diff --git a/docs/binjnes.js b/docs/binjnes.js index 00ec964..c0c40f7 100644 --- a/docs/binjnes.js +++ b/docs/binjnes.js @@ -6,7 +6,7 @@ var Binjnes = (() => { function(Binjnes) { Binjnes = Binjnes || {}; -var Module=typeof Binjnes!="undefined"?Binjnes:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="binjnes.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["h"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["t"];addOnInit(Module["asm"]["i"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);readyPromiseReject(e)}}instantiateAsync().catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function _fd_close(fd){return 52}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){return 70}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0}var asmLibraryArg={"a":_abort,"f":_emscripten_memcpy_big,"d":_emscripten_resize_heap,"g":_exit,"e":_fd_close,"c":_fd_seek,"b":_fd_write};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["i"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["j"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["k"]).apply(null,arguments)};var _emulator_delete=Module["_emulator_delete"]=function(){return(_emulator_delete=Module["_emulator_delete"]=Module["asm"]["l"]).apply(null,arguments)};var _emulator_set_reset=Module["_emulator_set_reset"]=function(){return(_emulator_set_reset=Module["_emulator_set_reset"]=Module["asm"]["m"]).apply(null,arguments)};var _emulator_read_state=Module["_emulator_read_state"]=function(){return(_emulator_read_state=Module["_emulator_read_state"]=Module["asm"]["n"]).apply(null,arguments)};var _emulator_write_state=Module["_emulator_write_state"]=function(){return(_emulator_write_state=Module["_emulator_write_state"]=Module["asm"]["o"]).apply(null,arguments)};var _emulator_was_prg_ram_updated=Module["_emulator_was_prg_ram_updated"]=function(){return(_emulator_was_prg_ram_updated=Module["_emulator_was_prg_ram_updated"]=Module["asm"]["p"]).apply(null,arguments)};var _emulator_read_prg_ram=Module["_emulator_read_prg_ram"]=function(){return(_emulator_read_prg_ram=Module["_emulator_read_prg_ram"]=Module["asm"]["q"]).apply(null,arguments)};var _emulator_write_prg_ram=Module["_emulator_write_prg_ram"]=function(){return(_emulator_write_prg_ram=Module["_emulator_write_prg_ram"]=Module["asm"]["r"]).apply(null,arguments)};var _file_data_delete=Module["_file_data_delete"]=function(){return(_file_data_delete=Module["_file_data_delete"]=Module["asm"]["s"]).apply(null,arguments)};var _joypad_delete=Module["_joypad_delete"]=function(){return(_joypad_delete=Module["_joypad_delete"]=Module["asm"]["u"]).apply(null,arguments)};var _joypad_begin_rewind_playback=Module["_joypad_begin_rewind_playback"]=function(){return(_joypad_begin_rewind_playback=Module["_joypad_begin_rewind_playback"]=Module["asm"]["v"]).apply(null,arguments)};var _joypad_end_rewind_playback=Module["_joypad_end_rewind_playback"]=function(){return(_joypad_end_rewind_playback=Module["_joypad_end_rewind_playback"]=Module["asm"]["w"]).apply(null,arguments)};var _rewind_append=Module["_rewind_append"]=function(){return(_rewind_append=Module["_rewind_append"]=Module["asm"]["x"]).apply(null,arguments)};var _rewind_delete=Module["_rewind_delete"]=function(){return(_rewind_delete=Module["_rewind_delete"]=Module["asm"]["y"]).apply(null,arguments)};var _emulator_new_simple=Module["_emulator_new_simple"]=function(){return(_emulator_new_simple=Module["_emulator_new_simple"]=Module["asm"]["z"]).apply(null,arguments)};var _emulator_get_ticks_f64=Module["_emulator_get_ticks_f64"]=function(){return(_emulator_get_ticks_f64=Module["_emulator_get_ticks_f64"]=Module["asm"]["A"]).apply(null,arguments)};var _emulator_run_until_f64=Module["_emulator_run_until_f64"]=function(){return(_emulator_run_until_f64=Module["_emulator_run_until_f64"]=Module["asm"]["B"]).apply(null,arguments)};var _rewind_get_newest_ticks_f64=Module["_rewind_get_newest_ticks_f64"]=function(){return(_rewind_get_newest_ticks_f64=Module["_rewind_get_newest_ticks_f64"]=Module["asm"]["C"]).apply(null,arguments)};var _rewind_get_oldest_ticks_f64=Module["_rewind_get_oldest_ticks_f64"]=function(){return(_rewind_get_oldest_ticks_f64=Module["_rewind_get_oldest_ticks_f64"]=Module["asm"]["D"]).apply(null,arguments)};var _joypad_new_simple=Module["_joypad_new_simple"]=function(){return(_joypad_new_simple=Module["_joypad_new_simple"]=Module["asm"]["E"]).apply(null,arguments)};var _set_joyp_up=Module["_set_joyp_up"]=function(){return(_set_joyp_up=Module["_set_joyp_up"]=Module["asm"]["F"]).apply(null,arguments)};var _set_joyp_down=Module["_set_joyp_down"]=function(){return(_set_joyp_down=Module["_set_joyp_down"]=Module["asm"]["G"]).apply(null,arguments)};var _set_joyp_left=Module["_set_joyp_left"]=function(){return(_set_joyp_left=Module["_set_joyp_left"]=Module["asm"]["H"]).apply(null,arguments)};var _set_joyp_right=Module["_set_joyp_right"]=function(){return(_set_joyp_right=Module["_set_joyp_right"]=Module["asm"]["I"]).apply(null,arguments)};var _set_joyp_B=Module["_set_joyp_B"]=function(){return(_set_joyp_B=Module["_set_joyp_B"]=Module["asm"]["J"]).apply(null,arguments)};var _set_joyp_A=Module["_set_joyp_A"]=function(){return(_set_joyp_A=Module["_set_joyp_A"]=Module["asm"]["K"]).apply(null,arguments)};var _set_joyp_start=Module["_set_joyp_start"]=function(){return(_set_joyp_start=Module["_set_joyp_start"]=Module["asm"]["L"]).apply(null,arguments)};var _set_joyp_select=Module["_set_joyp_select"]=function(){return(_set_joyp_select=Module["_set_joyp_select"]=Module["asm"]["M"]).apply(null,arguments)};var _set_zapper=Module["_set_zapper"]=function(){return(_set_zapper=Module["_set_zapper"]=Module["asm"]["N"]).apply(null,arguments)};var _add_snesmouse_delta=Module["_add_snesmouse_delta"]=function(){return(_add_snesmouse_delta=Module["_add_snesmouse_delta"]=Module["asm"]["O"]).apply(null,arguments)};var _set_snesmouse_buttons=Module["_set_snesmouse_buttons"]=function(){return(_set_snesmouse_buttons=Module["_set_snesmouse_buttons"]=Module["asm"]["P"]).apply(null,arguments)};var _set_controller_type=Module["_set_controller_type"]=function(){return(_set_controller_type=Module["_set_controller_type"]=Module["asm"]["Q"]).apply(null,arguments)};var _get_frame_buffer_ptr=Module["_get_frame_buffer_ptr"]=function(){return(_get_frame_buffer_ptr=Module["_get_frame_buffer_ptr"]=Module["asm"]["R"]).apply(null,arguments)};var _get_frame_buffer_size=Module["_get_frame_buffer_size"]=function(){return(_get_frame_buffer_size=Module["_get_frame_buffer_size"]=Module["asm"]["S"]).apply(null,arguments)};var _emulator_convert_frame_buffer_simple=Module["_emulator_convert_frame_buffer_simple"]=function(){return(_emulator_convert_frame_buffer_simple=Module["_emulator_convert_frame_buffer_simple"]=Module["asm"]["T"]).apply(null,arguments)};var _get_rgba_frame_buffer_ptr=Module["_get_rgba_frame_buffer_ptr"]=function(){return(_get_rgba_frame_buffer_ptr=Module["_get_rgba_frame_buffer_ptr"]=Module["asm"]["U"]).apply(null,arguments)};var _get_rgba_frame_buffer_size=Module["_get_rgba_frame_buffer_size"]=function(){return(_get_rgba_frame_buffer_size=Module["_get_rgba_frame_buffer_size"]=Module["asm"]["V"]).apply(null,arguments)};var _get_palette_ptr=Module["_get_palette_ptr"]=function(){return(_get_palette_ptr=Module["_get_palette_ptr"]=Module["asm"]["W"]).apply(null,arguments)};var _get_palette_size=Module["_get_palette_size"]=function(){return(_get_palette_size=Module["_get_palette_size"]=Module["asm"]["X"]).apply(null,arguments)};var _get_audio_buffer_ptr=Module["_get_audio_buffer_ptr"]=function(){return(_get_audio_buffer_ptr=Module["_get_audio_buffer_ptr"]=Module["asm"]["Y"]).apply(null,arguments)};var _get_audio_buffer_capacity=Module["_get_audio_buffer_capacity"]=function(){return(_get_audio_buffer_capacity=Module["_get_audio_buffer_capacity"]=Module["asm"]["Z"]).apply(null,arguments)};var _state_file_data_new=Module["_state_file_data_new"]=function(){return(_state_file_data_new=Module["_state_file_data_new"]=Module["asm"]["_"]).apply(null,arguments)};var _prg_ram_file_data_new=Module["_prg_ram_file_data_new"]=function(){return(_prg_ram_file_data_new=Module["_prg_ram_file_data_new"]=Module["asm"]["$"]).apply(null,arguments)};var _get_file_data_ptr=Module["_get_file_data_ptr"]=function(){return(_get_file_data_ptr=Module["_get_file_data_ptr"]=Module["asm"]["aa"]).apply(null,arguments)};var _get_file_data_size=Module["_get_file_data_size"]=function(){return(_get_file_data_size=Module["_get_file_data_size"]=Module["asm"]["ba"]).apply(null,arguments)};var _set_file_data_ptr=Module["_set_file_data_ptr"]=function(){return(_set_file_data_ptr=Module["_set_file_data_ptr"]=Module["asm"]["ca"]).apply(null,arguments)};var _set_file_data_size=Module["_set_file_data_size"]=function(){return(_set_file_data_size=Module["_set_file_data_size"]=Module["asm"]["da"]).apply(null,arguments)};var _file_data_delete2=Module["_file_data_delete2"]=function(){return(_file_data_delete2=Module["_file_data_delete2"]=Module["asm"]["ea"]).apply(null,arguments)};var _rewind_new_simple=Module["_rewind_new_simple"]=function(){return(_rewind_new_simple=Module["_rewind_new_simple"]=Module["asm"]["fa"]).apply(null,arguments)};var _rewind_begin=Module["_rewind_begin"]=function(){return(_rewind_begin=Module["_rewind_begin"]=Module["asm"]["ga"]).apply(null,arguments)};var _rewind_to_ticks_wrapper=Module["_rewind_to_ticks_wrapper"]=function(){return(_rewind_to_ticks_wrapper=Module["_rewind_to_ticks_wrapper"]=Module["asm"]["ha"]).apply(null,arguments)};var _rewind_end=Module["_rewind_end"]=function(){return(_rewind_end=Module["_rewind_end"]=Module["asm"]["ia"]).apply(null,arguments)};var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); +var Module=typeof Binjnes!="undefined"?Binjnes:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="binjnes.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["h"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["t"];addOnInit(Module["asm"]["i"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);readyPromiseReject(e)}}instantiateAsync().catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function _abort(){abort("")}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var SYSCALLS={varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret}};function _proc_exit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}function exitJS(status,implicit){EXITSTATUS=status;_proc_exit(status)}var _exit=exitJS;function _fd_close(fd){return 52}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){return 70}var printCharBuffers=[null,[],[]];function printChar(stream,curr){var buffer=printCharBuffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j>2]=num;return 0}var asmLibraryArg={"a":_abort,"f":_emscripten_memcpy_big,"d":_emscripten_resize_heap,"g":_exit,"e":_fd_close,"c":_fd_seek,"b":_fd_write};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["i"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["j"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["k"]).apply(null,arguments)};var _emulator_delete=Module["_emulator_delete"]=function(){return(_emulator_delete=Module["_emulator_delete"]=Module["asm"]["l"]).apply(null,arguments)};var _emulator_set_reset=Module["_emulator_set_reset"]=function(){return(_emulator_set_reset=Module["_emulator_set_reset"]=Module["asm"]["m"]).apply(null,arguments)};var _emulator_read_state=Module["_emulator_read_state"]=function(){return(_emulator_read_state=Module["_emulator_read_state"]=Module["asm"]["n"]).apply(null,arguments)};var _emulator_write_state=Module["_emulator_write_state"]=function(){return(_emulator_write_state=Module["_emulator_write_state"]=Module["asm"]["o"]).apply(null,arguments)};var _emulator_was_prg_ram_updated=Module["_emulator_was_prg_ram_updated"]=function(){return(_emulator_was_prg_ram_updated=Module["_emulator_was_prg_ram_updated"]=Module["asm"]["p"]).apply(null,arguments)};var _emulator_read_prg_ram=Module["_emulator_read_prg_ram"]=function(){return(_emulator_read_prg_ram=Module["_emulator_read_prg_ram"]=Module["asm"]["q"]).apply(null,arguments)};var _emulator_write_prg_ram=Module["_emulator_write_prg_ram"]=function(){return(_emulator_write_prg_ram=Module["_emulator_write_prg_ram"]=Module["asm"]["r"]).apply(null,arguments)};var _file_data_delete=Module["_file_data_delete"]=function(){return(_file_data_delete=Module["_file_data_delete"]=Module["asm"]["s"]).apply(null,arguments)};var _joypad_delete=Module["_joypad_delete"]=function(){return(_joypad_delete=Module["_joypad_delete"]=Module["asm"]["u"]).apply(null,arguments)};var _joypad_begin_rewind_playback=Module["_joypad_begin_rewind_playback"]=function(){return(_joypad_begin_rewind_playback=Module["_joypad_begin_rewind_playback"]=Module["asm"]["v"]).apply(null,arguments)};var _joypad_end_rewind_playback=Module["_joypad_end_rewind_playback"]=function(){return(_joypad_end_rewind_playback=Module["_joypad_end_rewind_playback"]=Module["asm"]["w"]).apply(null,arguments)};var _rewind_append=Module["_rewind_append"]=function(){return(_rewind_append=Module["_rewind_append"]=Module["asm"]["x"]).apply(null,arguments)};var _rewind_delete=Module["_rewind_delete"]=function(){return(_rewind_delete=Module["_rewind_delete"]=Module["asm"]["y"]).apply(null,arguments)};var _emulator_new_simple=Module["_emulator_new_simple"]=function(){return(_emulator_new_simple=Module["_emulator_new_simple"]=Module["asm"]["z"]).apply(null,arguments)};var _emulator_get_secs=Module["_emulator_get_secs"]=function(){return(_emulator_get_secs=Module["_emulator_get_secs"]=Module["asm"]["A"]).apply(null,arguments)};var _emulator_run_until_secs=Module["_emulator_run_until_secs"]=function(){return(_emulator_run_until_secs=Module["_emulator_run_until_secs"]=Module["asm"]["B"]).apply(null,arguments)};var _rewind_get_newest_secs=Module["_rewind_get_newest_secs"]=function(){return(_rewind_get_newest_secs=Module["_rewind_get_newest_secs"]=Module["asm"]["C"]).apply(null,arguments)};var _rewind_get_oldest_secs=Module["_rewind_get_oldest_secs"]=function(){return(_rewind_get_oldest_secs=Module["_rewind_get_oldest_secs"]=Module["asm"]["D"]).apply(null,arguments)};var _joypad_new_simple=Module["_joypad_new_simple"]=function(){return(_joypad_new_simple=Module["_joypad_new_simple"]=Module["asm"]["E"]).apply(null,arguments)};var _set_joyp_up=Module["_set_joyp_up"]=function(){return(_set_joyp_up=Module["_set_joyp_up"]=Module["asm"]["F"]).apply(null,arguments)};var _set_joyp_down=Module["_set_joyp_down"]=function(){return(_set_joyp_down=Module["_set_joyp_down"]=Module["asm"]["G"]).apply(null,arguments)};var _set_joyp_left=Module["_set_joyp_left"]=function(){return(_set_joyp_left=Module["_set_joyp_left"]=Module["asm"]["H"]).apply(null,arguments)};var _set_joyp_right=Module["_set_joyp_right"]=function(){return(_set_joyp_right=Module["_set_joyp_right"]=Module["asm"]["I"]).apply(null,arguments)};var _set_joyp_B=Module["_set_joyp_B"]=function(){return(_set_joyp_B=Module["_set_joyp_B"]=Module["asm"]["J"]).apply(null,arguments)};var _set_joyp_A=Module["_set_joyp_A"]=function(){return(_set_joyp_A=Module["_set_joyp_A"]=Module["asm"]["K"]).apply(null,arguments)};var _set_joyp_start=Module["_set_joyp_start"]=function(){return(_set_joyp_start=Module["_set_joyp_start"]=Module["asm"]["L"]).apply(null,arguments)};var _set_joyp_select=Module["_set_joyp_select"]=function(){return(_set_joyp_select=Module["_set_joyp_select"]=Module["asm"]["M"]).apply(null,arguments)};var _set_zapper=Module["_set_zapper"]=function(){return(_set_zapper=Module["_set_zapper"]=Module["asm"]["N"]).apply(null,arguments)};var _add_snesmouse_delta=Module["_add_snesmouse_delta"]=function(){return(_add_snesmouse_delta=Module["_add_snesmouse_delta"]=Module["asm"]["O"]).apply(null,arguments)};var _set_snesmouse_buttons=Module["_set_snesmouse_buttons"]=function(){return(_set_snesmouse_buttons=Module["_set_snesmouse_buttons"]=Module["asm"]["P"]).apply(null,arguments)};var _set_controller_type=Module["_set_controller_type"]=function(){return(_set_controller_type=Module["_set_controller_type"]=Module["asm"]["Q"]).apply(null,arguments)};var _get_frame_buffer_ptr=Module["_get_frame_buffer_ptr"]=function(){return(_get_frame_buffer_ptr=Module["_get_frame_buffer_ptr"]=Module["asm"]["R"]).apply(null,arguments)};var _get_frame_buffer_size=Module["_get_frame_buffer_size"]=function(){return(_get_frame_buffer_size=Module["_get_frame_buffer_size"]=Module["asm"]["S"]).apply(null,arguments)};var _emulator_convert_frame_buffer_simple=Module["_emulator_convert_frame_buffer_simple"]=function(){return(_emulator_convert_frame_buffer_simple=Module["_emulator_convert_frame_buffer_simple"]=Module["asm"]["T"]).apply(null,arguments)};var _get_rgba_frame_buffer_ptr=Module["_get_rgba_frame_buffer_ptr"]=function(){return(_get_rgba_frame_buffer_ptr=Module["_get_rgba_frame_buffer_ptr"]=Module["asm"]["U"]).apply(null,arguments)};var _get_rgba_frame_buffer_size=Module["_get_rgba_frame_buffer_size"]=function(){return(_get_rgba_frame_buffer_size=Module["_get_rgba_frame_buffer_size"]=Module["asm"]["V"]).apply(null,arguments)};var _get_palette_ptr=Module["_get_palette_ptr"]=function(){return(_get_palette_ptr=Module["_get_palette_ptr"]=Module["asm"]["W"]).apply(null,arguments)};var _get_palette_size=Module["_get_palette_size"]=function(){return(_get_palette_size=Module["_get_palette_size"]=Module["asm"]["X"]).apply(null,arguments)};var _get_audio_buffer_ptr=Module["_get_audio_buffer_ptr"]=function(){return(_get_audio_buffer_ptr=Module["_get_audio_buffer_ptr"]=Module["asm"]["Y"]).apply(null,arguments)};var _get_audio_buffer_capacity=Module["_get_audio_buffer_capacity"]=function(){return(_get_audio_buffer_capacity=Module["_get_audio_buffer_capacity"]=Module["asm"]["Z"]).apply(null,arguments)};var _state_file_data_new=Module["_state_file_data_new"]=function(){return(_state_file_data_new=Module["_state_file_data_new"]=Module["asm"]["_"]).apply(null,arguments)};var _prg_ram_file_data_new=Module["_prg_ram_file_data_new"]=function(){return(_prg_ram_file_data_new=Module["_prg_ram_file_data_new"]=Module["asm"]["$"]).apply(null,arguments)};var _get_file_data_ptr=Module["_get_file_data_ptr"]=function(){return(_get_file_data_ptr=Module["_get_file_data_ptr"]=Module["asm"]["aa"]).apply(null,arguments)};var _get_file_data_size=Module["_get_file_data_size"]=function(){return(_get_file_data_size=Module["_get_file_data_size"]=Module["asm"]["ba"]).apply(null,arguments)};var _set_file_data_ptr=Module["_set_file_data_ptr"]=function(){return(_set_file_data_ptr=Module["_set_file_data_ptr"]=Module["asm"]["ca"]).apply(null,arguments)};var _set_file_data_size=Module["_set_file_data_size"]=function(){return(_set_file_data_size=Module["_set_file_data_size"]=Module["asm"]["da"]).apply(null,arguments)};var _file_data_delete2=Module["_file_data_delete2"]=function(){return(_file_data_delete2=Module["_file_data_delete2"]=Module["asm"]["ea"]).apply(null,arguments)};var _rewind_new_simple=Module["_rewind_new_simple"]=function(){return(_rewind_new_simple=Module["_rewind_new_simple"]=Module["asm"]["fa"]).apply(null,arguments)};var _rewind_begin=Module["_rewind_begin"]=function(){return(_rewind_begin=Module["_rewind_begin"]=Module["asm"]["ga"]).apply(null,arguments)};var _rewind_to_secs=Module["_rewind_to_secs"]=function(){return(_rewind_to_secs=Module["_rewind_to_secs"]=Module["asm"]["ha"]).apply(null,arguments)};var _rewind_end=Module["_rewind_end"]=function(){return(_rewind_end=Module["_rewind_end"]=Module["asm"]["ia"]).apply(null,arguments)};var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); return Binjnes.ready diff --git a/docs/binjnes.wasm b/docs/binjnes.wasm index 87f042e..b350a06 100755 Binary files a/docs/binjnes.wasm and b/docs/binjnes.wasm differ diff --git a/docs/demo.js b/docs/demo.js index 136bddd..f2ba90b 100644 --- a/docs/demo.js +++ b/docs/demo.js @@ -10,7 +10,6 @@ const SCREEN_WIDTH = 256; const SCREEN_HEIGHT = 240; const AUDIO_FRAMES = 4096; const AUDIO_LATENCY_SEC = 0.1; -const PPU_TICKS_PER_SECOND = 5369318; const REWIND_FACTOR = 1.5; const REWIND_UPDATE_MS = 16; const FAST_FORWARD_FACTOR = 2.0; @@ -42,7 +41,7 @@ function clamp(x, min, max) { return Math.min(Math.max(x, min), max); } let data = { msPerFrame: 0, - ticks: 0, + secs: 0, loaded: false, loadedFile: null, paused: false, @@ -52,8 +51,8 @@ let data = { scale: 2, }, rewind: { - minTicks: 0, - maxTicks: 0, + minSecs: 0, + maxSecs: 0, }, files: { show: true, @@ -140,11 +139,11 @@ let vm = new Vue({ }, rewindTime: function() { const zeroPadLeft = (num, width) => ('' + (num | 0)).padStart(width, '0'); - const ticks = this.ticks; - const hr = (ticks / (60 * 60 * PPU_TICKS_PER_SECOND)) | 0; - const min = zeroPadLeft((ticks / (60 * PPU_TICKS_PER_SECOND)) % 60, 2); - const sec = zeroPadLeft((ticks / PPU_TICKS_PER_SECOND) % 60, 2); - const ms = zeroPadLeft((ticks / (PPU_TICKS_PER_SECOND / 1000)) % 1000, 3); + const secs = this.secs; + const hr = (secs / (60 * 60)) | 0; + const min = zeroPadLeft((secs / 60) % 60, 2); + const sec = zeroPadLeft(secs % 60, 2); + const ms = zeroPadLeft((secs / 1000) % 1000, 3); return `${hr}:${min}:${sec}.${ms}`; }, pauseLabel: function() { @@ -208,8 +207,8 @@ let vm = new Vue({ } this.paused = newPaused; }, - updateTicks: function() { - this.ticks = emulator.ticks; + updateSecs: function() { + this.secs = emulator.secs; }, togglePause: function() { if (!this.loaded) return; @@ -222,7 +221,7 @@ let vm = new Vue({ }, rewindTo: function(event) { if (!emulator) return; - emulator.rewindToTicks(+event.target.value); + emulator.rewindToSecs(+event.target.value); }, selectFile: function(index) { this.files.selected = index; @@ -478,16 +477,16 @@ class Emulator { this.state = EMULATOR_STATE_RUN; this.lastState = EMULATOR_STATE_RUN; this.intervalId = 0; - this.isRewindingToTicks = false; - this.ticks = 0; + this.isRewindingToSecs = false; + this.secs = 0; this.msPerFrame = 0; this.gpId = -1; this.gpPrev = new Array(vm.input.length); this.gpIntervalId = 0; this.rewind = { - oldestTicks: 0, - newestTicks: 0, - newestTicks: 0, + oldestSecs: 0, + newestSecs: 0, + newestSecs: 0, }; this.getPrgRamPromise = null; this.resolveGetPrgRam = null; @@ -626,28 +625,28 @@ class Emulator { } autoRewindInterval() { - const oldest = this.rewind.oldestTicks; - const start = this.ticks; - const delta = REWIND_FACTOR * REWIND_UPDATE_MS / 1000 * PPU_TICKS_PER_SECOND; + const oldest = this.rewind.oldestSecs; + const start = this.secs; + const delta = REWIND_FACTOR * REWIND_UPDATE_MS / 1000; const rewindTo = Math.max(oldest, start - delta); - this.rewindToTicks(rewindTo); + this.rewindToSecs(rewindTo); } autoFastForwardInterval() { - const delta = FAST_FORWARD_FACTOR * FAST_FORWARD_UPDATE_MS / 1000 * PPU_TICKS_PER_SECOND; - this.runUntil(this.ticks + delta); + const delta = FAST_FORWARD_FACTOR * FAST_FORWARD_UPDATE_MS / 1000; + this.runUntil(this.secs + delta); } - rewindToTicks(ticks) { + rewindToSecs(secs) { if (!this.isPaused && !this.isAutoRewinding) return; - if (!this.isRewindingToTicks) { - emulatorWorker.postMessage({msg: 'rewindToTicks', ticks}); - this.isRewindingToTicks = true; + if (!this.isRewindingToSecs) { + emulatorWorker.postMessage({msg: 'rewindToSecs', secs}); + this.isRewindingToSecs = true; } } - runUntil(ticks) { - emulatorWorker.postMessage({msg: 'runUntil', ticks}) + runUntil(secs) { + emulatorWorker.postMessage({msg: 'runUntil', secs}) } setReset(active) { @@ -690,19 +689,19 @@ class Emulator { this.getPrgRamPromise = null; break; case 'runUntil:result': - this.ticks = e.data.ticks; - vm.updateTicks(); + this.secs = e.data.secs; + vm.updateSecs(); vm.prgRamUpdated ||= e.data.prgRamUpdated; this.video.renderTexture(); this.msPerFrame = e.data.msPerFrame; - vm.rewind.minTicks = this.rewind.oldestTicks = e.data.oldestTicks; - vm.rewind.maxTicks = this.rewind.newestTicks = e.data.newestTicks; + vm.rewind.minSecs = this.rewind.oldestSecs = e.data.oldestSecs; + vm.rewind.maxSecs = this.rewind.newestSecs = e.data.newestSecs; break; - case 'rewindToTicks:result': - this.ticks = e.data.ticks; - vm.updateTicks(); + case 'rewindToSecs:result': + this.secs = e.data.secs; + vm.updateSecs(); this.video.renderTexture(); - this.isRewindingToTicks = false; + this.isRewindingToSecs = false; break; } } diff --git a/docs/worker.js b/docs/worker.js index 2e0f49d..9d1e7ac 100644 --- a/docs/worker.js +++ b/docs/worker.js @@ -17,7 +17,6 @@ const REWIND_BUFFER_CAPACITY = 4 * 1024 * 1024; const CONTROLLER_JOYPAD = 0 const CONTROLLER_ZAPPER = 1 const CONTROLLER_SNES_MOUSE = 2 -const PPU_TICKS_PER_SECOND = 5369318; const MAX_UPDATE_SEC = 5 / 60; self.emulator = null; @@ -41,16 +40,16 @@ onmessage = async function(e) { if (emulator) { emulator.cancelAnimationFrame(); } break; case 'runUntil': - if (emulator) { emulator.runUntil(e.data.ticks); } + if (emulator) { emulator.runUntil(e.data.secs); } break; case 'setReset': - if (emulator) { emulator.setReset(e.data.ticks); } + if (emulator) { emulator.setReset(e.data.secs); } break; case 'beginRewind': if (emulator) { emulator.beginRewind(); } break; - case 'rewindToTicks': - if (emulator) { emulator.rewindToTicks(e.data.ticks); } + case 'rewindToSecs': + if (emulator) { emulator.rewindToSecs(e.data.secs); } break; case 'endRewind': if (emulator) { emulator.endRewind(); } @@ -114,7 +113,7 @@ class Emulator { this.msPerFrame = 0; this.rafCancelToken = null; this.lastRafSec = 0; - this.leftoverTicks = 0; + this.leftoverSecs = 0; this.rewind = new Rewind(module, this.e); this.mouseFracX = 0; this.mouseFracY = 0; @@ -203,27 +202,27 @@ class Emulator { this.rewind.beginRewind(); } - rewindToTicks(ticks) { - ticks = Math.min(Math.max(ticks, this.rewind.oldestTicks), this.rewind.newestTicks); - if (this.rewind.rewindToTicks(ticks)) { - this.runUntil(ticks); + rewindToSecs(secs) { + secs = Math.min(Math.max(secs, this.rewind.oldestSecs), this.rewind.newestSecs); + if (this.rewind.rewindToSecs(secs)) { + this.runUntil(secs); } - self.postMessage({msg: 'rewindToTicks:result', ticks: this.ticks}); + self.postMessage({msg: 'rewindToSecs:result', secs: this.secs}); } endRewind() { this.rewind.endRewind(); this.lastRafSec = 0; - this.leftoverTicks = 0; + this.leftoverSecs = 0; } - get ticks() { - return this.module._emulator_get_ticks_f64(this.e); + get secs() { + return this.module._emulator_get_secs(this.e); } - runUntil(runUntilTicks) { + runUntil(runUntilSecs) { while (true) { - const event = this.module._emulator_run_until_f64(this.e, runUntilTicks); + const event = this.module._emulator_run_until_secs(this.e, runUntilSecs); if (event & EVENT_NEW_FRAME) { this.rewind.pushBuffer(); const buffer = this.videoBuffer.slice(); @@ -237,17 +236,17 @@ class Emulator { break; } } - const ticks = this.ticks; + const secs = this.secs; const msPerFrame = this.msPerFrame; const prgRamUpdated = this.module._emulator_was_prg_ram_updated(this.e); - this.leftoverTicks = (ticks - runUntilTicks) | 0; + this.leftoverSecs = (secs - runUntilSecs) | 0; self.postMessage({ msg: 'runUntil:result', - ticks, + secs, prgRamUpdated, msPerFrame, - oldestTicks: this.rewind.oldestTicks, - newestTicks: this.rewind.newestTicks, + oldestSecs: this.rewind.oldestSecs, + newestSecs: this.rewind.newestSecs, }); } @@ -257,12 +256,11 @@ class Emulator { const startSec = rafStartMs / 1000; deltaSec = Math.max(startSec - (this.lastRafSec || startSec), 0); this.lastRafSec = startSec; - const startTicks = this.ticks; - const deltaTicks = - Math.min(deltaSec, MAX_UPDATE_SEC) * PPU_TICKS_PER_SECOND; - const runUntilTicks = startTicks + deltaTicks - this.leftoverTicks; + const startSecs = this.secs; + const deltaSecs = Math.min(deltaSec, MAX_UPDATE_SEC); + const runUntilSecs = startSecs + deltaSecs - this.leftoverSecs; const startMs = performance.now(); - this.runUntil(runUntilTicks); + this.runUntil(runUntilSecs); const endMs = performance.now(); const lerp = (from, to, alpha) => alpha * from + (1 - alpha) * to; // this.msPerFrame = lerp(this.msPerFrame, deltaSec * 1000, 0.3); @@ -326,12 +324,12 @@ class Rewind { this.module._joypad_delete(this.joypadPtr); } - get oldestTicks() { - return this.module._rewind_get_oldest_ticks_f64(this.bufferPtr); + get oldestSecs() { + return this.module._rewind_get_oldest_secs(this.bufferPtr); } - get newestTicks() { - return this.module._rewind_get_newest_ticks_f64(this.bufferPtr); + get newestSecs() { + return this.module._rewind_get_newest_secs(this.bufferPtr); } pushBuffer() { @@ -351,10 +349,9 @@ class Rewind { this.module._joypad_begin_rewind_playback(this.joypadPtr); } - rewindToTicks(ticks) { + rewindToSecs(secs) { if (!this.isRewinding) return; - return this.module._rewind_to_ticks_wrapper(this.statePtr, ticks) === - RESULT_OK; + return this.module._rewind_to_secs(this.statePtr, secs) === RESULT_OK; } endRewind() { diff --git a/src/emscripten/exported.json b/src/emscripten/exported.json index 7995a81..d123e4b 100644 --- a/src/emscripten/exported.json +++ b/src/emscripten/exported.json @@ -2,11 +2,11 @@ "_add_snesmouse_delta", "_emulator_convert_frame_buffer_simple", "_emulator_delete", -"_emulator_get_ticks_f64", +"_emulator_get_secs", "_emulator_new_simple", "_emulator_read_prg_ram", "_emulator_read_state", -"_emulator_run_until_f64", +"_emulator_run_until_secs", "_emulator_set_reset", "_emulator_was_prg_ram_updated", "_emulator_write_prg_ram", @@ -34,10 +34,10 @@ "_rewind_begin", "_rewind_delete", "_rewind_end", -"_rewind_get_newest_ticks_f64", -"_rewind_get_oldest_ticks_f64", +"_rewind_get_newest_secs", +"_rewind_get_oldest_secs", "_rewind_new_simple", -"_rewind_to_ticks_wrapper", +"_rewind_to_secs", "_set_controller_type", "_set_file_data_ptr", "_set_file_data_size", diff --git a/src/emscripten/wrapper.c b/src/emscripten/wrapper.c index 1a37a19..1c5c647 100644 --- a/src/emscripten/wrapper.c +++ b/src/emscripten/wrapper.c @@ -40,20 +40,28 @@ Emulator* emulator_new_simple(void* rom_data, size_t rom_size, return e; } -f64 emulator_get_ticks_f64(Emulator* e) { - return (f64)emulator_get_ticks(e); +static f64 ticks_to_secs(Ticks ticks) { + return (f64)ticks / e->master_ticks_per_second; } -EmulatorEvent emulator_run_until_f64(Emulator* e, f64 until_ticks_f64) { - return emulator_run_until(e, (Ticks)until_ticks_f64); +static Ticks secs_to_ticks(f64 secs) { + return (Ticks)(secs * e->master_ticks_per_second); } -f64 rewind_get_newest_ticks_f64(RewindBuffer* buf) { - return (f64)rewind_get_newest_ticks(buf); +f64 emulator_get_secs(Emulator* e) { + return ticks_to_secs(emulator_get_ticks(e)); } -f64 rewind_get_oldest_ticks_f64(RewindBuffer* buf) { - return (f64)rewind_get_oldest_ticks(buf); +EmulatorEvent emulator_run_until_secs(Emulator* e, f64 until_secs) { + return emulator_run_until(e, secs_to_ticks(until_secs)); +} + +f64 rewind_get_newest_secs(RewindBuffer* buf) { + return ticks_to_secs(rewind_get_newest_ticks(buf)); +} + +f64 rewind_get_oldest_secs(RewindBuffer* buf) { + return ticks_to_secs(rewind_get_oldest_ticks(buf)); } static void default_joypad_callback(SystemInput *input, void *user_data, @@ -211,8 +219,8 @@ RewindState *rewind_begin(Emulator *e, RewindBuffer *rewind_buffer, return &s_rewind_state; } -Result rewind_to_ticks_wrapper(RewindState* state, f64 ticks_f64) { - Ticks ticks = (Ticks)ticks_f64; +Result rewind_to_secs(RewindState* state, f64 secs) { + Ticks ticks = secs_to_ticks(secs); CHECK(SUCCESS( rewind_to_ticks(state->rewind_buffer, ticks, &state->rewind_result))); CHECK(SUCCESS(emulator_read_state(e, &state->rewind_result.file_data)));