This repository was archived by the owner on Jan 4, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmin.wepsim_core.js
More file actions
1 lines (1 loc) · 86.2 KB
/
min.wepsim_core.js
File metadata and controls
1 lines (1 loc) · 86.2 KB
1
function wepsim_file_saveTo(textToWrite,fileNameToSaveAs){window.requestFileSystem=window.requestFileSystem||window.webkitRequestFileSystem;if(typeof window.requestFileSystem==="undefined"){return false}var koHandler=function(error){wepsim_notify_error("<strong>ERROR</strong>: failed file write","Failed file write. "+"Error found "+error.toString())};var okHandler=function(msg){wepsim_notify_success("<strong>INFO</strong>","Successful file write request: "+fileNameToSaveAs)};var onWriteFile=function(fileWriter){var textFileAsBlob=new Blob([textToWrite],{type:"text/plain"});fileWriter.onerror=koHandler;fileWriter.onwriteend=okHandler;fileWriter.write(textFileAsBlob)};var onCreatFile=function(fileEntry){fileEntry.createWriter(onWriteFile)};var onInitFs=function(fs){fs.root.getFile(fileNameToSaveAs,{create:true,exclusive:false},onCreatFile,koHandler)};var grandedBytes=2*1024*1024;var onQuotaFs=function(grantedBytes){window.requestFileSystem(PERSISTENT,grandedBytes,onInitFs,koHandler)};navigator.webkitPersistentStorage.requestQuota(grandedBytes,onQuotaFs,koHandler);return true}function wepsim_file_loadFrom(fileToLoad,functionOnLoad){var fileReader=new FileReader;if(fileReader===null){return false}fileReader.onload=function(fileLoadedEvent){var textFromFileLoaded=fileLoadedEvent.target.result;if(null!==functionOnLoad){functionOnLoad(textFromFileLoaded)}};fileReader.onerror=function(e){wepsim_notify_error("<strong>ERROR</strong>","File could not be read. "+"Error code "+e.target.error.code)};fileReader.readAsText(fileToLoad,"UTF-8");return true}function wepsim_file_downloadTo(textToWrite,fileNameToSaveAs){var windowURL=window.webkitURL||window.URL;var textFileAsBlob=new Blob([textToWrite],{type:"text/plain"});var downloadLink=document.createElement("a");downloadLink.innerHTML="Download File";downloadLink.style.display="none";downloadLink.download=fileNameToSaveAs;downloadLink.href=windowURL.createObjectURL(textFileAsBlob);downloadLink.onclick=function(event){document.body.removeChild(event.target)};document.body.appendChild(downloadLink);downloadLink.click();wepsim_notify_success("<strong>INFO</strong>","Successful opportunity for downloading: "+fileNameToSaveAs)}function getURLTimeStamp(){var dateObj=new Date;var year=dateObj.getUTCFullYear();var month=dateObj.getUTCMonth()+1;var day=dateObj.getUTCDate();var hour=dateObj.getUTCHours();var minutes=dateObj.getUTCMinutes();return year+month+day+hour+minutes}function fetchURL(f_url){if(navigator.onLine){return fetch(f_url+"?time="+getURLTimeStamp())}return caches.match(f_url)}function wepsim_save_to_file(textToWrite,fileNameToSaveAs){var ret=false;if(is_cordova())ret=wepsim_file_saveTo(textToWrite,fileNameToSaveAs);else ret=wepsim_file_downloadTo(textToWrite,fileNameToSaveAs);return ret}function wepsim_load_from_url(url,do_next){if(false===is_mobile()){fetchURL(url).then((function(response){if(typeof response=="undefined"){wepsim_notify_error("<strong>ERROR</strong>","File "+url+" could not be fetched:<br>\n"+" * Please check that you are on-line.");return}if(response.ok){response.text().then((function(text){do_next(text)}))}}))}else{var xmlhttp=new XMLHttpRequest;xmlhttp.onreadystatechange=function(){if(xmlhttp.readyState==4&&(xmlhttp.status==200||xmlhttp.status==0)){var textFromFileLoaded=xmlhttp.responseText;if(null!==do_next)do_next(textFromFileLoaded)}};xmlhttp.open("GET",url,true);xmlhttp.send()}}function wepsim_url_getJSON(url_json){var jstr={};var jobj=[];try{jstr=$.getJSON({url:url_json,async:false});jobj=JSON.parse(jstr.responseText)}catch(e){ws_alert("Unable to load '"+url_json+"': "+e+".\n");jobj=[]}return jobj}function wepsim_url_json(json_url,do_after){var xhr=new XMLHttpRequest;xhr.open("HEAD",json_url,true);xhr.onreadystatechange=function(){if(this.readyState==this.DONE){var size=0;var content_length=xhr.getResponseHeader("Content-Length");if(content_length!==null){size=parseInt(content_length)}var max_json_size=get_cfg("max_json_size");if(size<max_json_size){$.getJSON(json_url,do_after).fail((function(e){wepsim_notify_do_notify("getJSON","There was some problem for getting "+json_url,"warning",0)}))}}};xhr.send()}ws_info.clipboard_copy="";function get_clipboard_copy(){return ws_info.clipboard_copy}function SelectText(element){var doc=document,text=doc.getElementById(element),range,selection;if(doc.body.createTextRange){range=document.body.createTextRange();range.moveToElementText(text);range.select()}else if(window.getSelection){selection=window.getSelection();range=document.createRange();range.selectNodeContents(text);selection.removeAllRanges();selection.addRange(range)}}function wepsim_clipboard_CopyFromDiv(element_name){var msg="unsuccessful";try{SelectText(element_name);if(document.execCommand("copy")){ws_info.clipboard_copy=$("#"+element_name).text();msg="successful"}}catch(e){msg+=msg+" because "+e}wepsim_notify_success("<strong>INFO</strong>","Copied "+msg+"!.")}function wepsim_clipboard_CopyFromTextarea(element_name){var msg="successful";try{var copyTextarea=document.getElementById(element_name);copyTextarea.select();document.execCommand("copy");ws_info.clipboard_copy=$("#"+element_name).val()}catch(err){msg="unsuccessful"}wepsim_notify_success("<strong>INFO</strong>","Copied "+msg+"!.")}ws_info.preload_tasks=[{name:"mode",action:function(hash){var ws_mode=get_cfg("ws_mode");if(hash.mode!==ws_mode)wsweb_select_main(hash.mode);return"<li>Mode set to <strong>"+hash.mode+"</strong>.</li> "}},{name:"config_set",action:function(hash){cfgset_load(hash.config_set);wepsim_uicfg_restore();return"<li>Configuration set titled <strong>"+hash.config_set+"</strong> loaded.</li>"}},{name:"examples_set",action:function(hash){var url_examples_set=get_cfg("example_url");var ret=wepsim_example_loadSet(url_examples_set);wepsim_example_reset();wepsim_example_load(hash.examples_set);var result_txt=" has been loaded";if(null==ret){result_txt=" could not be loaded"}return"<li>Examples set titled <strong>"+hash.examples_set+"</strong>"+result_txt+".</li>"}},{name:"example",action:function(hash){var example_obj=null;var example_index=parseInt(hash.example);if(isNaN(example_index)==false){example_obj=ws_info.examples[example_index]}else{for(var i=0;i<ws_info.examples.length;i++){if(ws_info.examples[i].id==hash.example)example_obj=ws_info.examples[i]}}if(typeof example_obj==="undefined"){return""}var example_uri=example_obj.hardware+":"+example_obj.microcode+":"+example_obj.assembly;load_from_example_firmware(example_uri,true);return"<li>Example titled <strong>"+example_obj.title+"</strong> has been loaded.</li> "}},{name:"simulator",action:function(hash){var panels=hash.simulator.split(":");if(typeof panels[0]!=="undefined"){if(panels[0]==="microcode"){wsweb_change_show_processor()}if(panels[0]==="assembly"){wsweb_change_show_asmdbg()}}if(typeof panels[1]!=="undefined"){wsweb_set_details(panels[1].toUpperCase())}if(typeof panels[2]!=="undefined"){wsweb_do_action(panels[2].toLowerCase())}return"<li>User interface has been adapted.</li> "}},{name:"checkpoint",action:function(hash){uri_obj=new URL(hash.checkpoint);wepsim_checkpoint_loadURI(uri_obj)}},{name:"notify",action:function(hash){return""}},{name:"preload",action:function(hash){return""}}];function wepsim_preload_fromHash(hash){var key="";var act=function(){};var o="";for(var i=0;i<ws_info.preload_tasks.length;i++){key=ws_info.preload_tasks[i].name;act=ws_info.preload_tasks[i].action;if(hash[key]!==""){o=o+act(hash)}}return o}function wepsim_preload_get2hash(window_location,f_preload_fromHash){var hash={};var hash_field="";var uri_obj=null;if(typeof window_location==="undefined"){return hash}var parameters=new URL(window_location).searchParams;for(i=0;i<ws_info.preload_tasks.length;i++){hash_field=ws_info.preload_tasks[i].name;hash[hash_field]=parameters.get(hash_field);if(hash[hash_field]===null){hash[hash_field]=""}}if(hash.preload!==""){try{uri_obj=new URL(hash.preload);wepsim_url_json(uri_obj.pathname,f_preload_fromHash)}catch(e){ws_alert('unable to preload json from "'+uri_obj.pathname+'"')}}return hash}function wepsim_checkpoint_get(tagName){var ws_mode=get_cfg("ws_mode");var history_obj=wepsim_state_history_get();var state_current=wepsim_state_get_clk();var state_obj=simcore_simstate_current2state();state_current.content=simcore_simstate_state2checklist(state_obj,"");var elements={mode:ws_mode,firmware:inputfirm.getValue(),assembly:inputasm.getValue(),state_current:state_current,state_history:history_obj,record:simcore_record_get(),tag:tagName,notify:true};return elements}function wepsim_checkpoint_loadFromObj(checkpointObj,obj_fileToLoad){var o="";var u="";if(checkpointObj===null){return"null checkpoint"}if(typeof checkpointObj.mode==="undefined")checkpointObj.mode="ep";if(typeof checkpointObj.firmware==="undefined")checkpointObj.firmware="";if(typeof checkpointObj.assembly==="undefined")checkpointObj.assembly="";if(typeof checkpointObj.state_history==="undefined")checkpointObj.state_history=[];if(typeof checkpointObj.record==="undefined")checkpointObj.record=[];wepsim_state_history_reset();for(var i=0;i<checkpointObj.state_history.length;i++){ws_info.state_history.push(checkpointObj.state_history[i])}wepsim_state_history_list();o+="<li>State: restored into the state history.</li>";wsweb_select_main(checkpointObj.mode);inputfirm.setValue(checkpointObj.firmware);inputasm.setValue(checkpointObj.assembly);o+="<li>Firmware and Assembly: Loaded";u="";if(checkpointObj.firmware.trim()!==""){wepsim_compile_firmware(checkpointObj.firmware);u+="Firmware"}if(checkpointObj.assembly.trim()!==""){wepsim_compile_assembly(checkpointObj.assembly);u+=" + Assembly"}if(u!==""){o+=" + Compiled"}o+=".</li>";simcore_record_set(checkpointObj.record);if(o!==""){o="WepSIM has been instructed to restore a checkpoint:<br>"+"<ul>"+o+"</ul>"+"To close this notification please press in the "+'<span class="btn btn-sm btn-info py-0" data-dismiss="alert">X</span> mark. <br>'}if(checkpointObj.notify===true){wepsim_notify_do_notify("Restored Checkpoint",o,"info",get_cfg("NOTIF_delay"))}return o}function wepsim_checkpoint_Obj2NB(elements){var val="";var typ="";var cells=[];for(var key in elements){val=elements[key];typ=typeof val;if(typ!=="string"){val=JSON.stringify(val,null,2)}cells.push({cell_type:"markdown",source:"## "+key,metadata:{}});cells.push({cell_type:"code",source:val,outputs:[],execution_count:1,metadata:{name:key,type:typ,collapsed:false,deletable:false,editable:false}})}var nbObj={metadata:{kernelspec:{name:"node_nteract",language:"javascript",display_name:"Node.js (nteract)"},kernel_info:{name:"node_nteract"},language_info:{name:"javascript",version:"8.2.1",mimetype:"application/javascript",file_extension:".js"},title:"WepSIM ",nteract:{version:"nteract-on-jupyter@2.0.0"}},nbformat:4,nbformat_minor:0,cells:cells};return nbObj}function wepsim_checkpoint_NB2Obj(nbObj){var elements={};if(typeof nbObj.cells==="undefined")return elements;if(typeof nbObj.cells.length==="undefined")return elements;var key="";var type="";var value="";for(var i=0;i<nbObj.cells.length;i++){if(nbObj.cells[i].cell_type!=="code"){continue}key=nbObj.cells[i].metadata.name;type=nbObj.cells[i].metadata.type;value=nbObj.cells[i].source;if(type!=="string"){value=JSON.parse(value)}elements[key]=value}return elements}function wepsim_checkpoint_save(id_filename,id_tagname,checkpointObj){var obj_fileName=document.getElementById(id_filename);var obj_tagName=document.getElementById(id_tagname);if(obj_fileName===null||obj_tagName===null){return false}var checkpointNB=wepsim_checkpoint_Obj2NB(checkpointObj);var checkpointStr=JSON.stringify(checkpointNB,null,2);wepsim_save_to_file(checkpointStr,obj_fileName.value);return true}function wepsim_checkpoint_afterLoad(textLoaded,obj_fileToLoad){try{var current_checkpoint=null;if(textLoaded!==""){current_checkpoint=JSON.parse(textLoaded);current_checkpoint=wepsim_checkpoint_NB2Obj(current_checkpoint)}wepsim_checkpoint_loadFromObj(current_checkpoint,obj_fileToLoad)}catch(e){ws_alert("Error on checkpoint file: "+e)}}function wepsim_checkpoint_load(id_file_to_load){var obj_fileToLoad=document.getElementById(id_file_to_load).files[0];if(obj_fileToLoad===null||typeof obj_fileToLoad==="undefined"){return false}var function_after_loaded=function(textLoaded){wepsim_checkpoint_afterLoad(textLoaded,obj_fileToLoad)};wepsim_file_loadFrom(obj_fileToLoad,function_after_loaded);return true}function wepsim_checkpoint_loadURI(obj_uri){if(typeof obj_uri==="undefined"||obj_uri===null){return false}try{var filename=obj_uri.href.substring(obj_uri.href.lastIndexOf("/")+1);wepsim_url_json(obj_uri.href,(function(data){var obj_refName={name:filename};var current_checkpoint=wepsim_checkpoint_NB2Obj(data);wepsim_checkpoint_loadFromObj(current_checkpoint,obj_refName)}));return true}catch(e){return false}}function wepsim_checkpoint_loadExample(tutorial_name){var file_uri="examples/checkpoint/"+tutorial_name;var function_after_loaded=function(data_text){var obj_refName={name:file_uri};wepsim_checkpoint_afterLoad(data_text,obj_refName)};wepsim_load_from_url(file_uri,function_after_loaded)}function wepsim_checkpoint_share(id_filename,id_tagname,checkpointObj){var obj_fileName=document.getElementById(id_filename);var obj_tagName=document.getElementById(id_tagname);if(obj_fileName===null||obj_tagName===null){return false}var checkpointNB=wepsim_checkpoint_Obj2NB(checkpointObj);var checkpointStr=JSON.stringify(checkpointNB,null,2);var share_title="WepSIM checkpoint backup";var share_text=checkpointStr;var share_url="";if(obj_tagName.value.toString().trim()!=="")share_title+=" ("+obj_tagName.value+")...";else share_title+="...";return share_information("checkpoint",share_title,share_text,share_url)}function wepsim_checkpoint_backup_load(){var obj_wsbackup=[];try{var json_wsbackup=localStorage.getItem("wepsim_backup");obj_wsbackup=JSON.parse(json_wsbackup)}catch(e){obj_wsbackup=null}if(obj_wsbackup==null){obj_wsbackup=[]}return obj_wsbackup}function wepsim_checkpoint_backup_save(obj_wsbackup){var json_wsbackup=JSON.stringify(obj_wsbackup);localStorage.setItem("wepsim_backup",json_wsbackup);return obj_wsbackup}function wepsim_checkpoint_listCache(id_listdiv){var o='<span style="background-color:#FCFC00"><<span data-langkey="Empty">Empty</span>></span>';var obj_wsbackup=wepsim_checkpoint_backup_load();if(obj_wsbackup.length==0){$("#"+id_listdiv+"").html(o);return true}o='<div class="btn-group btn-group-toggle list-group m-1" data-toggle="buttons">';obj_wsbackup=obj_wsbackup.reverse();for(i=0;i<obj_wsbackup.length;i++){o+='<label class="list-group-item btn btn-white border-dark text-truncate rounded-sm">'+' <input type="radio" name="browserCacheElto" id="'+i+'" autocomplete="off">'+obj_wsbackup[i].tag+"</label>"}o+="</div>";$("#"+id_listdiv+"").html(o);return true}function wepsim_checkpoint_loadFromCache(id_backupname){var ret={error:true,msg:""};var browserCacheElto=$("input[name="+id_backupname+"]:checked");if(typeof browserCacheElto[0]==="undefined"){ret.msg="Invalid arguments";return ret}var id_backupcache=browserCacheElto[0].id;var obj_wsbackup=wepsim_checkpoint_backup_load();obj_wsbackup=obj_wsbackup.reverse();var current_checkpoint=obj_wsbackup[id_backupcache];if(typeof current_checkpoint==="undefined"){ret.msg="Backup id is not valid";return ret}var obj_fileToLoad={name:""};wepsim_checkpoint_loadFromObj(current_checkpoint,obj_fileToLoad);ret.error=false;ret.msg="Processing load request...";return ret}function wepsim_checkpoint_addCurrentToCache(){var obj_wsbackup=wepsim_checkpoint_backup_load();var current_date=Date().toString();var current_checkpoint=wepsim_checkpoint_get(current_date);if(current_checkpoint.firmware.trim()!==""&¤t_checkpoint.assembly.trim()!==""){obj_wsbackup.push(current_checkpoint)}wepsim_checkpoint_backup_save(obj_wsbackup);return true}function wepsim_checkpoint_clearCache(){var obj_wsbackup=[];wepsim_checkpoint_backup_save(obj_wsbackup);return true}function wepsim_update_signal_dialog_title(key){var b_btns=key+": "+"<button onclick=\"$('#bot_signal').carousel(0);\" "+' type="button" class="btn btn-info">Value</button>'+"<button onclick=\"$('#bot_signal').carousel(1); "+" var shval = $('#ask_shard').val(); "+" var shkey = $('#ask_skey').val(); "+" update_signal_loadhelp('#help2', shval, shkey);\" "+' type="button" class="btn btn-success">Help</button>';return wepsim_config_dialog_dropdown("success",b_btns,"var shval = $('#ask_shard').val(); "+"var shkey = $('#ask_skey').val(); "+"update_signal_loadhelp('#help2', shval, shkey);\"")}function wepsim_update_signal_dialog_body(key,signal_obj){var checkvalue=signal_obj.value>>>0;var str_bolded="";var str_checked="";var input_help="";var behav_raw="";var behav_str="";var n=0;var nvalues=Math.pow(2,signal_obj.nbits);if(signal_obj.behavior.length==nvalues){input_help='<ol start="0" class="list-group list-group-flush">';for(var k=0;k<signal_obj.behavior.length;k++){str_checked=" ";if(k==checkvalue){str_checked=' checked="checked" '}str_bolded=" ";if(k==signal_obj.default_value){str_bolded='<span class="badge badge-info">default value</span>'}behav_raw=signal_obj.behavior[k];behav_str=compute_signal_verbals(key,k);if(""==behav_str.trim()){behav_str="<without main effect>"}n=k.toString(10);input_help+='<li class="list-group-item p-1">'+'<label class="m-1 btn-like" id="'+key+"_"+n+'">'+' <input aria-label="value '+n+'" type="radio" name="ask_svalue" '+' value="'+n+'" '+str_checked+"/>"+' <span class="badge badge-secondary badge-pill">'+n+"</span>"+" "+" <span>"+behav_str+"</span> "+str_bolded+' <p class="m-0 ml-3 bg-light collapse collapse7"><small>'+behav_raw+"</small></p>"+"</label>"+"</li>"}input_help+="</ol>"}else{input_help+='<ol start="0">'+"<span><center><label>"+'<input aria-label="value for '+key+'" type="number" size=4 min=0 max='+(nvalues-1)+" class=dial "+' name="ask_svalue" value="'+signal_obj.value+'"/>'+" "+" 0 - "+(nvalues-1)+"</center></label></span>\n"+"</ol>"}var curr_hw=simhw_short_name();if(""==curr_hw){curr_hw="ep"}return'<div id="bot_signal" class="carousel" data-ride="carousel" data-interval="false">'+' <div class="carousel-inner" role="listbox">'+' <div class="carousel-item active">'+' <div id="scroller-signal" '+' style="max-height:70vh; width:inherit; overflow:auto; -webkit-overflow-scrolling:touch;">'+' <form class="form-horizontal" style="white-space:wrap;">'+' <input aria-label="value for '+key+'" id="ask_skey" name="ask_skey" type="hidden" value="'+key+'" class="form-control input-md"> '+' <input aria-label="value for '+curr_hw+'" id="ask_shard" name="ask_shard" type="hidden" value="'+curr_hw+'" class="form-control input-md"> '+input_help+" </form>"+" </div>"+" </div>"+' <div class="carousel-item">'+' <div id=help2 style="max-height:65vh; width:inherit; overflow:auto; -webkit-overflow-scrolling:touch;">Loading...</div>'+" </div>"+" </div>"+"</div>"}function wepsim_update_signal_dialog(key){var signal_obj=simhw_sim_signal(key);if(typeof signal_obj==="undefined"){return null}var dlg_obj={id:"dlg_updatesignal",title:function(){return wepsim_update_signal_dialog_title(key)},body:function(){return wepsim_update_signal_dialog_body(key,signal_obj)},value:signal_obj.value,buttons:{success:{label:'<i class="fas fa-screwdriver"></i> '+'<span data-langkey="Save">Save</span>',className:"btn-info btn-sm col col-md-3 float-right",callback:function(){key=$("#ask_skey").val();user_input=$("input[name='ask_svalue']:checked").val();if(typeof user_input=="undefined"){user_input=$("input[name='ask_svalue']").val()}wepsim_update_signal_with_value(key,user_input);wsweb_dialogbox_close_updatesignal()}},close:{label:'<i class="fa fa-times mr-2"></i>'+'<span data-langkey="Close">Close</span>',className:"btn-primary btn-sm col col-md-3 float-right",callback:function(){wsweb_dialogbox_close_updatesignal()}}},onshow:function(){if(typeof $(".dial").knob!=="undefined"){var nvalues=Math.pow(2,signal_obj.nbits);$(".dial").knob({min:0,max:nvalues-1}).val(signal_obj.value).trigger("change")}var bb=$("#dlg_updatesignal");bb.find(".modal-title").addClass("mx-auto");bb.find(".bootbox-close-button").addClass("mx-1");bb.modal("handleUpdate");wsweb_scroll_record("#scroller-signal");simcore_record_captureInit()},size:"large"};return wsweb_dlg_open(dlg_obj)}function wepsim_update_signal_quick(key){var signal_obj=simhw_sim_signal(key);if(typeof signal_obj==="undefined"){return}var nvalues=Math.pow(2,simhw_sim_signal(key).nbits);var user_input=simhw_sim_signal(key).value;user_input=(user_input+1)%nvalues;wepsim_update_signal_with_value(key,user_input)}function wepsim_update_signal_with_value(key,value){simhw_sim_signal(key).value=value;propage_signal_update(key);simcore_record_append_new("Update signal "+key+" with value "+value,'wepsim_update_signal_with_value("'+key+'", '+value+");\n")}function show_visgraph(jit_fire_dep,jit_fire_order){var sig={};var tmp_hash={};var tmp_nodes=[];var tmp_id=0;for(sig in simhw_sim_signals()){tmp_hash[sig]=tmp_id;tmp_nodes.push({id:tmp_id,label:sig,title:sig});tmp_id++}for(var i=0;i<jit_fire_order.length;i++){tmp_nodes[tmp_hash[jit_fire_order[i]]].color="#7BE141"}var jit_dep_nodes=new vis.DataSet(tmp_nodes);var tmp_edges=[];for(sig in simhw_sim_signals()){for(var sigorg in jit_fire_dep[sig]){tmp_edges.push({from:tmp_hash[sigorg],to:tmp_hash[sig],arrows:"to"})}}var jit_dep_edges=new vis.DataSet(tmp_edges);var jit_dep_container=document.getElementById("depgraph1c");var jit_dep_data={nodes:jit_dep_nodes,edges:jit_dep_edges};var jit_dep_options={interaction:{hover:true},height:"255px",nodes:{borderWidth:2,shadow:true},edges:{width:2,shadow:true}};jit_dep_network=new vis.Network(jit_dep_container,jit_dep_data,jit_dep_options)}function wepsim_state_get_clk(){var reg_maddr=get_value(simhw_sim_state("REG_MICROADDR"));var reg_clk=get_value(simhw_sim_state("CLK"));var timestamp=(new Date).getTime();return{time:timestamp,title:"clock "+reg_clk+" @ µaddress "+reg_maddr,title_short:"clock "+reg_clk+",<br>µadd "+reg_maddr}}ws_info.state_history=[];function wepsim_state_history_get(){return ws_info.state_history}function wepsim_state_history_reset(){ws_info.state_history=[]}function wepsim_state_history_add(){var ret=wepsim_state_get_clk();var state_obj=simcore_simstate_current2state();ret.content=simcore_simstate_state2checklist(state_obj,"");ws_info.state_history.push(ret)}function wepsim_execute_reset(reset_cpu,reset_memory){wepsim_state_history_reset();if(true===reset_memory){var SIMWARE=get_simware();if(SIMWARE.firmware.length!==0){update_memories(SIMWARE)}}if(true===reset_cpu){simcore_reset()}}function wepsim_execute_instruction(){var ret=simcore_check_if_can_execute();if(false===ret.ok){wsweb_dlg_alert(ret.msg);return false}var options={verbosity:0,cycles_limit:get_cfg("DBG_limitick")};ret=simcore_execute_microprogram(options);if(false===ret.ok){wepsim_show_stopbyevent("Info",ret.msg);return false}return true}function wepsim_execute_microinstruction(){var ret=simcore_check_if_can_execute();if(false===ret.ok){wsweb_dlg_alert(ret.msg);return false}ret=simcore_execute_microinstruction();if(false===ret.ok){wepsim_show_stopbyevent("Info",ret.msg);return false}return true}function wepsim_execute_set_breakpoint(hexaddr,is_set){var SIMWARE=get_simware();var curr_mp=simhw_internalState("MP");var curr_addr=parseInt(hexaddr,16);if(typeof curr_mp[curr_addr]!=="undefined"){curr_mp[curr_addr].breakpoint=is_set}if(typeof SIMWARE.mp[hexaddr]!=="undefined"){SIMWARE.mp[hexaddr].breakpoint=is_set}return true}function wepsim_execute_toggle_breakpoint(hexaddr){var SIMWARE=get_simware();var curr_mp=simhw_internalState("MP");var curr_addr=parseInt(hexaddr,16);var is_set=false;if(typeof curr_mp[curr_addr]!=="undefined"){is_set=curr_mp[curr_addr].breakpoint;curr_mp[curr_addr].breakpoint=!is_set}if(typeof SIMWARE.mp[hexaddr]!=="undefined"){is_set=SIMWARE.mp[hexaddr].breakpoint;SIMWARE.mp[hexaddr].breakpoint=!is_set}return is_set}function wepsim_execute_toggle_microbreakpoint(hexaddr){var curr_mc=simhw_internalState("MC");var curr_addr=parseInt(hexaddr,16);var is_set=false;if(typeof curr_mc[curr_addr]!=="undefined"){is_set=curr_mc[curr_addr].breakpoint;curr_mc[curr_addr].breakpoint=!is_set}return is_set}var DBG_stop=true;var DBG_limit_instruction=0;function wepsim_execute_stop(){DBG_stop=true;DBG_limit_instruction=0;webui_button_set_stop("exebar1");var o="CLK-"+Math.trunc(get_value(simhw_sim_state("CLK")))+"+"+"DECO_INS-"+Math.trunc(get_value(simhw_sim_state("DECO_INS")))+"+"+"ACC_TIME-"+Math.trunc(get_value(simhw_sim_state("ACC_TIME")));simcore_ga("execution","execution."+"cpu","execution."+"cpu"+"."+o);return true}function wepsim_execute_play(wepsim_execute_stop){var ret=simcore_check_if_can_execute();if(false===ret.ok){wsweb_dlg_alert(ret.msg);return false}DBG_stop=false;DBG_limit_instruction=0;webui_button_set_start("exebar1");wepsim_execute_chainplay(wepsim_execute_stop);return true}function wepsim_execute_toggle_play(wepsim_execute_stop){if(DBG_stop===false){DBG_stop=true}else{wepsim_execute_play(wepsim_execute_stop)}return DBG_stop}function wepsim_check_stopbybreakpoint(dash_memaddr){if(typeof dash_memaddr==="undefined"){return false}return dash_memaddr.breakpoint}function wepsim_show_stopbyevent(msg1,msg2){var dlg_obj={id:"current_state2",title:function(){var maddr_name=simhw_sim_ctrlStates_get().mpc.state;var reg_maddr=get_value(simhw_sim_state(maddr_name));var curr_maddr="0x"+reg_maddr.toString(16);var pc_name=simhw_sim_ctrlStates_get().pc.state;var reg_pc=get_value(simhw_sim_state(pc_name));var curr_addr="0x"+reg_pc.toString(16);var dialog_title=msg1+" @ pc="+curr_addr+"+mpc="+curr_maddr;return'<span id="dlg_title2">'+dialog_title+"</span>"},body:function(){return'<div class="card card-info border-light m-2">'+'<div class="card-body">'+' <div class="row"> '+'\t <div class="col-auto">'+'\t <em class="fas fa-comment-alt"></em>'+"\t </div>"+'\t <div class="col">'+'\t <h5><span id="dlg_body2">'+msg2+"</span></h5>"+"\t </div>"+" </div>"+"</div>"+"</div>"},buttons:{states:{label:"<span data-langkey='States'>States</span>",className:"btn btn-secondary col float-left shadow-none mr-auto",callback:function(){wsweb_dlg_close(dlg_obj);wsweb_dialog_open("state");return true}},close:{label:"<span data-langkey='Close'>Close</span>",className:"btn-primary col float-right shadow-none"}},size:"",onshow:function(){}};wsweb_dlg_open(dlg_obj);return true}function wepsim_check_memdashboard(ref_mdash,notif_origin){if(typeof ref_mdash==="undefined"){return true}if(ref_mdash.state){wepsim_state_history_add();wepsim_state_history_list()}var notifications=ref_mdash.notify.length;if(notifications>1){var dialog_title="Notify @ 0x"+parseInt(notif_origin).toString(16)+": "+ref_mdash.notify[1];var dialog_msg='<div style="max-height:70vh; width:inherit; overflow:auto; -webkit-overflow-scrolling:touch;">';for(var k=1;k<notifications;k++){dialog_msg+=ref_mdash.notify[k]+"\n<br>"}dialog_msg+="</div>";bootbox.confirm({title:dialog_title,message:dialog_msg,buttons:{cancel:{label:"Stop",className:"btn-danger btn-sm"},confirm:{label:"Continue",className:"btn-primary btn-sm"}},callback:function(result){if(result)setTimeout(wepsim_execute_chainplay,get_cfg("DBG_delay"),wepsim_execute_stop);else wepsim_execute_stop()}});return false}return true}function pack_ret2(p_ok,p_level,p_msg){var ret2={ok:p_ok,msg_level:p_level,msg:p_msg};return ret2}function wepsim_execute_chunk(options,chunk){var ret=false;var ret2={};var curr_mp=simhw_internalState("MP");var curr_firm=simhw_internalState("FIRMWARE");var pc_name=simhw_sim_ctrlStates_get().pc.state;var ref_pc=simhw_sim_state(pc_name);var reg_pc=get_value(ref_pc);var maddr_name=simhw_sim_ctrlStates_get().mpc.state;var ref_maddr=simhw_sim_state(maddr_name);var reg_maddr=get_value(ref_maddr);var ref_mdash=null;var i_clks=0;var i=0;while(i<chunk){ret2=simcore_execute_microinstruction2(reg_maddr,reg_pc);if(false===ret2.ok){return pack_ret2(false,"Info",ret2.msg)}i_clks++;if(options.cycles_limit>0&&i_clks>=options.cycles_limit){return pack_ret2(false,"Info","WARNING: clock cycles limit reached in a single instruction.")}reg_maddr=get_value(ref_maddr);reg_pc=get_value(ref_pc);ref_mdash=simhw_internalState_get("MC",reg_maddr);ret=wepsim_check_memdashboard(ref_mdash,reg_maddr);if(false===ret){return pack_ret2(false,"","")}ret=wepsim_check_stopbybreakpoint(ref_mdash);if(true===ret){return pack_ret2(false,"Breakpoint","INFO: Microinstruction is going to be issue.")}if(0==reg_maddr&&false==ref_mdash.is_native||0!=reg_maddr&&true==ref_mdash.is_native){ref_mdash=simhw_internalState_get("MP",reg_pc);ret=wepsim_check_memdashboard(ref_mdash,reg_pc);if(false===ret){return pack_ret2(false,"","")}ret=wepsim_check_stopbybreakpoint(ref_mdash);if(true===ret){return pack_ret2(false,"Breakpoint","INFO: Instruction is going to be fetched.")}i++;i_clks=0}}return pack_ret2(true,"","INFO: number of instruction executed: "+i+" (limited to "+options.instruction_limit+")")}function wepsim_execute_chunk_atlevel(chunk,wepsim_execute_stop){var options={};var ret=false;var playlevel=get_cfg("DBG_level");if(playlevel!=="instruction"){options={verbosity:0,cycles_limit:get_cfg("DBG_limitick")};ret=wepsim_execute_chunk(options,chunk);if(ret.ok==false&&ret.msg.trim()!=""){wepsim_show_stopbyevent(ret.msg_level,ret.msg);wepsim_execute_stop()}return ret.ok}var curr_firm=simhw_internalState("FIRMWARE");var pc_name=simhw_sim_ctrlStates_get().pc.state;var ref_pc=simhw_sim_state(pc_name);var maddr_name=simhw_sim_ctrlStates_get().mpc.state;var ref_maddr=simhw_sim_state(maddr_name);var ref_mdash=0;options={verbosity:0,cycles_limit:get_cfg("DBG_limitick")};ret=false;var reg_pc=0;for(var i=0;i<chunk;i++){ret=simcore_execute_microprogram(options);if(ret.ok===false){wepsim_show_stopbyevent("Info",ret.msg);wepsim_execute_stop();return false}reg_pc=get_value(ref_pc);ref_mdash=simhw_internalState_get("MP",reg_pc);ret=wepsim_check_stopbybreakpoint(ref_mdash);if(true===ret){wepsim_show_stopbyevent("Breakpoint","Instruction is going to be fetched.");wepsim_execute_stop();return false}}return true}var max_turbo=5;function wepsim_reset_max_turbo(){max_turbo=5}function wepsim_execute_chainplay(wepsim_execute_stop){var t0=1;var t1=1;if(DBG_stop){wepsim_execute_stop();return}var turbo=1;if(get_cfg("DBG_delay")<5){turbo=Math.trunc(max_turbo)}if(max_turbo===5){t0=performance.now()}var options={verbosity:0,cycles_limit:get_cfg("DBG_limitick")};var ret=wepsim_execute_chunk(options,turbo);if(ret.ok==false){if(ret.msg.trim()!=""){wepsim_show_stopbyevent(ret.msg_level,ret.msg);wepsim_execute_stop()}return}if(max_turbo===5){t1=performance.now()}if(max_turbo===5){max_turbo=5e3/(t1-t0)+1}DBG_limit_instruction+=turbo;if(DBG_limit_instruction>get_cfg("DBG_limitins")){wepsim_show_stopbyevent("Limit","Number of executed instructions limit reached.<br>"+"<br>"+"See related configuration options about limits:<br>"+"<img height='100vw' src='./images/simulator/simulator018.jpg'>");wepsim_execute_stop();return}setTimeout(wepsim_execute_chainplay,get_cfg("DBG_delay"),wepsim_execute_stop)}function wepsim_notify_show_notify(ntf_title,ntf_message,ntf_type,ntf_delay){var ac=$("#alerts-container");if(ac.length===0){ac=$('<div id="alerts-container" '+' class="col-10 offset-xs-1 col-md-8 offset-md-2 col-lg-6 offset-lg-3" '+' style="position:fixed; top:10%; z-index:256;">');$("body").append(ac)}var btn1=$('<button type="button" class="close" onclick="wepsim_notify_close(); return false;">');var alert1=$('<div class="alert alert-'+ntf_type+' shadow border border-light">');ac.prepend(alert1.append(btn1.append("×")).append(ntf_message));if(ntf_delay!=0){window.setTimeout((function(){alert1.alert("close")}),ntf_delay)}var msg="Notification type "+ntf_type+" and title "+ntf_title+":"+ntf_message+". ";msg=$("</p>").html(msg).text();simcore_voice_speak(msg)}function wepsim_notify_do_notify(ntf_title,ntf_message,ntf_type,ntf_delay){simcore_notifications_add(ntf_title,ntf_message,ntf_type,ntf_delay);wepsim_notify_show_notify(ntf_title,ntf_message,ntf_type,ntf_delay)}function wepsim_notify_success(ntf_title,ntf_message){return wepsim_notify_do_notify(ntf_title,ntf_message,"success",get_cfg("NOTIF_delay"))}function wepsim_notify_error(ntf_title,ntf_message){return wepsim_notify_do_notify(ntf_title,ntf_message,"danger",0)}function wepsim_notify_warning(ntf_title,ntf_message){return wepsim_notify_do_notify(ntf_title,ntf_message,"warning",get_cfg("NOTIF_delay"))}function wepsim_notify_close(){$(".alert").alert("close");simcore_record_append_new("Close all notifications","wepsim_notify_close();\n")}ws_info.modes=["newbie","intro","asm_mips","asm_rv32","asm_z80"];ws_info.default_example={asm_mips:"ep:ep_mips:ep_s4_e1",asm_rv32:"ep:ep_rv32:ep_s7_e2",asm_z80:"ep:ep_z80:ep_s7_e3"};function wepsim_mode_getAvailableModes(){return ws_info.modes}function wepsim_mode_change(optValue){var hwid=-1;if(ws_info.modes.includes(optValue))hwid=simhw_getIdByName("ep");else hwid=simhw_getIdByName(optValue);if(hwid!=-1){wepsim_activehw(hwid)}wepsim_activeview("only_asm",false);if(optValue.startsWith("asm_")){wepsim_activeview("only_asm",true);load_from_example_firmware(ws_info.default_example[optValue],false)}if("intro"==optValue){wsweb_recordbar_show();wepsim_checkpoint_loadExample("tutorial_2.txt");return true}if("newbie"==optValue){wepsim_newbie_tour();return true}return true}function share_information(info_shared,share_title,share_text,share_url){if(typeof navigator.share==="undefined"){var msg="Sorry, unable to share:<br>\n"+"navigator.share is not available.<br>"+"<br>"+'<div id="qrcode1" class="mx-auto"></div>'+"<br>";wsweb_dlg_alert(msg);if(share_url!==""){var qrcode=new QRCode("qrcode1");qrcode.makeCode(share_url)}return false}var data={};data.title=share_title;data.text=share_text;data.url=share_url;try{navigator.share(data)}catch(err){wsweb_dlg_alert("Sorry, unsuccessful share: "+err.message)}simcore_ga("ui","ui.share","ui.share."+info_shared);return true}function wsweb_dlg_open(dialog_obj){if(typeof dialog_obj!=="object"){return null}var ext_dlg_obj={title:dialog_obj.title(),message:dialog_obj.body(),value:dialog_obj.value,scrollable:true,size:dialog_obj.size,centerVertical:true,keyboard:true,animate:false,onShow:function(){dialog_obj.onshow();var ws_idiom=get_cfg("ws_idiom");i18n_update_tags("dialogs",ws_idiom);i18n_update_tags("gui",ws_idiom)},buttons:dialog_obj.buttons};var d1=bootbox.dialog(ext_dlg_obj);d1.init((function(){d1.attr("id",dialog_obj.id)}));d1.one("hidden.bs.modal",(function(){wsweb_dialog_close(dialog_obj)}));d1.find(".modal-title").addClass("ml-auto");d1.modal("handleUpdate");d1.modal("show");return d1}function wsweb_dlg_close(dialog_obj){if(typeof dialog_obj!=="object"){return null}var d1=$("#"+dialog_obj.id);d1.modal("hide");return d1}function wsweb_dlg_alert(msg){var a_obj={title:'<i class="fas fa-exclamation"></i> '+'<span data-langkey="Alert">Alert</span>',message:'<div class="p-2">'+msg+"</div>",scrollable:true,centerVertical:true,keyboard:true,animate:false,buttons:{cancel:{label:'<i class="fa fa-times mr-2"></i>'+'<span data-langkey="Close">Close</span>',className:"btn btn-primary btn-sm "+"col col-sm-3 float-right shadow-none"}},size:""};var d1=bootbox.dialog(a_obj);d1.find(".modal-title").addClass("ml-auto");d1.modal("handleUpdate");d1.modal("show");return d1}function wepsim_show_breakpoint_icon_list(){var o="<div class='container' style='max-height:65vh; overflow:auto; -webkit-overflow-scrolling:touch;'>"+"<div class='row'>";var prev_type="";for(var elto in ws_info.breakpoint_icon_list){if(ws_info.breakpoint_icon_list[elto].type!=prev_type){o=o+"</div>"+"<div class='row p-1'>"+"<div class='float-none text-left text-capitalize font-weight-bold col-12 border-bottom border-secondary'>"+ws_info.breakpoint_icon_list[elto].type+"</div>"+"</div>"+"<div class='row'>";prev_type=ws_info.breakpoint_icon_list[elto].type}o=o+"<img src='images/stop/stop_"+elto+".gif' alt='"+elto+" icon' "+" class='img-thumbnail col-3 mx-2 d-block "+ws_info.breakpoint_icon_list[elto].addclass+"'"+" style='height:6vh; min-height:30px;'"+" onclick=\"$('#img_select1').attr('src', 'images/stop/stop_"+elto+".gif');"+" $('#img_select1').attr('class', '"+ws_info.breakpoint_icon_list[elto].addclass+"');"+" $('#img_select1').attr('data-theme', '');"+"\t set_cfg('ICON_theme','"+elto+"'); save_cfg();"+" $('#breakpointicon1').popover('hide');"+' wepsim_uicfg_apply();">'}o=o+"</div>"+"</div>";return o}function wepsim_show_breakpoint_icon_template(){var o='<div class="popover" role="tooltip">'+'<div class="arrow"></div><h3 class="popover-header"></h3>'+'<div class="popover-body"></div>'+'<div class="popover-footer">'+' <div class="m-0 p-2" style="background-color: #f7f7f7">'+' <button type="button" id="close" data-role="none" '+' class="btn btn-sm btn-danger w-100 p-0" '+" onclick=\"$('#breakpointicon1').popover('hide');\"><span data-langkey=\"Close\">Close</span></button>"+" </div>"+"</div>"+"</div>";return o}function wepsim_config_dialog_title(name,color,str_onchange){return"<div class='dropdown btn-group'>"+"<button type='button' "+" class='btn btn-outline-"+color+" px-3 py-1 dropdown-toggle' "+" data-toggle='dropdown' id='dropdown-title1' "+" aria-expanded='false' aria-haspopup='true'>"+"<span class='font-weight-bold' data-langkey='"+name+"'>"+name+"</span>"+"</button>"+"<div class='dropdown-menu' "+" style='overflow-y:auto; max-height:55vh; z-index:100000;' "+" aria-labelledby='dropdown-title1'>"+" <form class='px-3 m-0'><div class='form-group m-0'>"+" <label for='wsdt"+name+"'><span data-langkey='details'>details</span></label>"+" <button class='btn btn-outline-secondary btn-block py-1' "+" type='button' id='wsdt"+name+"' "+' onclick=\'$(".collapse7").collapse("toggle");\'>'+" <span class='text-truncate'>± <span data-langkey='Description'>Description</span></span>"+" </button>"+" </div></form>"+"<div class='dropdown-divider m-1'></div>"+" <form class='px-3 m-0'><div class='form-group m-0'>"+" <label for='dd2'><span data-langkey='idiom'>idiom</span></label>"+i18n_get_select("select7b"+name,str_onchange)+" </div></form>"+"</div>"+"</div>"}function wepsim_config_dialog_dropdown(color,base_buttons,str_onchange){return"<div class='dropdown btn-group'>"+base_buttons+"<button type='button' "+" data-toggle='dropdown' id='dropdown-title1' "+" aria-expanded='false' aria-haspopup='true' "+" class='btn btn-"+color+" dropdown-toggle dropdown-toggle-split'"+"><span class='sr-only'>Toggle Dropdown</span>"+"</button>"+"<div class='dropdown-menu' "+" style='overflow-y:auto; max-height:55vh; z-index:100000;' "+" aria-labelledby='dropdown-title1'>"+" <form class='px-3 m-0'><div class='form-group m-0'>"+" <label for='wsdt"+name+"'>details</label>"+" <button class='btn btn-outline-secondary btn-block py-1' "+" type='button' id='wsdt"+name+"' "+' onclick=\'$(".collapse7").collapse("toggle");\'>'+" <span>± <span data-langkey='Description'>Description</span></span>"+" </button>"+" </div></form>"+"<div class='dropdown-divider m-1'></div>"+" <form class='px-3 m-0'><div class='form-group m-0'>"+" <label for='dd2'>idiom</label>"+i18n_get_select("select7b"+name,str_onchange)+" </div></form>"+"</div>"+"</div>"}ws_info.config_ui=[];ws_info.config_ui.push({id:"select7",type:"General",u_class:"",code_cfg:"<div class='form-group m-0'>"+i18n_get_selectcfg()+"</div>",code_init:function(){$("#select7").val(get_cfg("ws_idiom"))},description:"<span data-langkey='Idiom for help, examples, etc.'>Idiom for help, examples, etc.</span>"});ws_info.config_ui.push({id:"slider3",type:"General",u_class:"",code_cfg:"<div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label8-2000'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Notification delay: slow'"+"\t\t onclick=\"update_cfg('NOTIF_delay', 2000);\">"+"\t\t<input type='radio' name='options' id='radio8-2000' autocomplete='off' ><span data-langkey='Slow'>Slow</span>"+"\t </label>"+"\t <label id='label8-1000'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Notification delay: normal'"+"\t\t onclick=\"update_cfg('NOTIF_delay', 1000);\">"+"\t\t<input type='radio' name='options' id='radio8-1000' autocomplete='off' ><span data-langkey='Normal'>Normal</span>"+"\t </label>"+"\t <label id='label8-100'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Notification delay: fast'"+"\t\t onclick=\"update_cfg('NOTIF_delay', 100);\">"+"\t\t<input type='radio' name='options' id='radio8-100' autocomplete='off' ><span data-langkey='Fast'>Fast</span>"+"\t </label>"+"\t</div>",code_init:function(){$("#label8-"+get_cfg("NOTIF_delay")).button("toggle")},description:"<span data-langkey='Notification speed: time before disapear'>Notification speed: time before disapear</span>"});ws_info.config_ui.push({id:"radio15",type:"General",u_class:"",code_cfg:"<div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label15-true'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary p-1' "+" aria-label='WepSIM dark mode: true' "+'\t\t onclick="wepsim_restore_darkmode(true) ; '+"\t\t update_cfg('ws_skin_dark_mode', true);\">"+"\t\t<input type='radio' name='options' id='radio15-true' aria-label='Dark mode: true' autocomplete='off' >On"+"\t </label>"+"\t <label id='label15-false'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary p-1' "+" aria-label='WepSIM dark mode: false' "+'\t\t onclick="wepsim_restore_darkmode(false) ; '+"\t\t update_cfg('ws_skin_dark_mode', false);\">"+"\t\t<input type='radio' name='options' id='radio15-false' aria-label='Dark mode: false' autocomplete='off' >Off"+"\t </label>"+"\t</div>",code_init:function(){var optValue=get_cfg("ws_skin_dark_mode");$("#label15-"+optValue).button("toggle");wepsim_restore_darkmode(optValue)},description:"<span data-langkey='Dark Mode'>Dark Mode</span>"});ws_info.config_ui.push({id:"radio12",type:"Execution",u_class:"",code_cfg:"<div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label12-50'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Speed: slow'"+"\t\t onclick=\"update_cfg('DBG_delay', 50);\">"+"\t\t<input type='radio' name='options' id='radio12-50' autocomplete='off' ><span data-langkey='Slow'>Slow</span>"+"\t </label>"+"\t <label id='label12-5'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Speed: normal'"+"\t\t onclick=\"update_cfg('DBG_delay', 5);\">"+"\t\t<input type='radio' name='options' id='radio12-5' autocomplete='off' ><span data-langkey='Normal'>Normal</span>"+"\t </label>"+"\t <label id='label12-1'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Speed: fast'"+"\t\t onclick=\"update_cfg('DBG_delay', 1);\">"+"\t\t<input type='radio' name='options' id='radio12-1' autocomplete='off' ><span data-langkey='Fast'>Fast</span>"+"\t </label>"+"\t</div>",code_init:function(){$("#label12-"+get_cfg("DBG_delay")).button("toggle")},description:"<span data-langkey='Running speed: execution speed'>Running speed: execution speed</span>"});ws_info.config_ui.push({id:"select1",type:"Execution",u_class:"",code_cfg:"<a href='#' id='breakpointicon1' title='Please select breakpoint icon' tabindex='0'"+" data-toggle='popover' data-trigger='click'>"+" \t\t<img alt='stop icon' id='img_select1' src='images/stop/stop_classic.gif' class='' "+" style='position:relative; left:10px; height:30px !important; width:30px !important;'>"+"</a>",code_init:function(){var elto=get_cfg("ICON_theme");$("#img_select1").attr("src","images/stop/stop_"+elto+".gif");$("#img_select1").attr("class",ws_info.breakpoint_icon_list[elto].addclass);$("#breakpointicon1").popover({html:true,content:wepsim_show_breakpoint_icon_list,template:wepsim_show_breakpoint_icon_template(),sanitizeFn:function(content){return content}}).on("shown.bs.popover",(function(shownEvent){wepsim_uicfg_apply()}))},description:"<span data-langkey='Breakpoint icon: icon to be used for breakpoints'>Breakpoint icon: icon to be used for breakpoints</span>"});ws_info.config_ui.push({id:"select6",type:"Execution",u_class:"",code_cfg:" <div class='form-group m-0'>"+"\t <select name='select6' id='select6' class='form-control form-control-sm custom-select'"+"\t\t aria-label='max. ticks per instruction' "+"\t\t onchange=\"var opt = $(this).find('option:selected');"+"\t\t\t var optValue = opt.val();"+"\t\t\t update_cfg('DBG_limitins',optValue);\""+"\t\t data-native-menu='false'>"+"\t\t<option value='-1'>without limit</option>"+"\t\t<option value='500' >500</option>"+"\t\t<option value='1000' >1000</option>"+"\t\t<option value='2000' >2000</option>"+"\t\t<option value='10000'>10000</option>"+"\t\t<option value='50000'>50000</option>"+"\t </select>"+"\t </div>",code_init:function(){$("#select6").val(get_cfg("DBG_limitins"))},description:"<span data-langkey='Limit instructions: number of instructions to be executed'>Limit instructions: number of instructions to be executed</span>"});ws_info.config_ui.push({id:"select3",type:"Execution",u_class:"",code_cfg:" <div class='form-group m-0'>"+"\t <select name='select3' id='select3' class='form-control form-control-sm custom-select'"+"\t\t aria-label='max. ticks per instruction' "+"\t\t onchange=\"var opt = $(this).find('option:selected');"+"\t\t\t var optValue = opt.val();"+"\t\t\t update_cfg('DBG_limitick',optValue);\""+"\t\t data-native-menu='false'>"+"\t\t<option value='-1'>without limit</option>"+"\t\t<option value='500' >500</option>"+"\t\t<option value='1000' >1000</option>"+"\t\t<option value='2000' >2000</option>"+"\t\t<option value='10000'>10000</option>"+"\t\t<option value='50000'>50000</option>"+"\t </select>"+"\t </div>",code_init:function(){$("#select3").val(get_cfg("DBG_limitick"))},description:"<span data-langkey='Limit instruction ticks: to limit clock ticks'>Limit instruction ticks: to limit clock ticks</span>"});ws_info.config_ui.push({id:"radio7",type:"Editor",u_class:"",code_cfg:"<div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label7-default'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;' "+"\t\t onclick=\"update_cfg('editor_theme','default');"+"\t\t\t sim_cfg_editor_theme(inputfirm) ;"+'\t\t\t sim_cfg_editor_theme(inputasm) ;">'+"\t\t<input type='radio' name='options' id='radio7-default' aria-label='Editor theme: light' autocomplete='off' ><span data-langkey='Light'>Light</span>"+"\t </label>"+"\t <label id='label7-blackboard'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;' "+"\t\t onclick=\"update_cfg('editor_theme','blackboard');"+"\t\t\t sim_cfg_editor_theme(inputfirm) ;"+'\t\t\t sim_cfg_editor_theme(inputasm) ;">'+"\t\t<input type='radio' name='options' id='radio7-blackboard' aria-label='Editor theme: dark' autocomplete='off' ><span data-langkey='Dark'>Dark</span>"+"\t </label>"+"\t</div>",code_init:function(){$("#label7-"+get_cfg("editor_theme")).button("toggle")},description:"<span data-langkey='Editor theme: light or dark'>Editor theme: light or dark</span>"});ws_info.config_ui.push({id:"select2",type:"Editor",u_class:"",code_cfg:"<div class='form-group m-0'>"+" <select name='select2' id='select2' class='form-control form-control-sm custom-select'"+"\t aria-label='Editor mode' "+"\t onchange=\"var opt = $(this).find('option:selected');"+"\t\t var optValue = opt.val();"+"\t\t update_cfg('editor_mode',optValue);"+"\t\t sim_cfg_editor_mode(inputfirm);"+'\t\t sim_cfg_editor_mode(inputasm);"'+"\t data-native-menu='false'>"+"\t<option value='default'>default</option>"+"\t<option value='vim'>VIM</option>"+"\t<option value='emacs'>Emacs</option>"+"\t<option value='sublime'>Sublime</option>"+" </select>"+"</div>",code_init:function(){$("#select2").val(get_cfg("editor_mode"))},description:"<span data-langkey='Editor mode: vim, emacs, etc.'>Editor mode: vim, emacs, etc.</span>"});ws_info.config_ui.push({id:"radio2",type:"Register file",u_class:"user_archived",code_cfg:" <div class='btn-group-toggle' data-toggle='buttons' >"+" <div class='btn-group d-flex btn-group-justified'>"+"\t <label id='label2-unsigned_16_nofill'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='register file display format: hexadecimal'"+"\t\t onclick=\"update_cfg('RF_display_format','unsigned_16_nofill'); show_memories_values();\">"+"\t\t<input type='radio' name='options' id='radio2-unsigned_16_nofill' autocomplete='off' >1A<sub>16</sub>"+"\t </label>"+"\t <label id='label2-unsigned_10_nofill'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='register file display format: decimal'"+"\t\t onclick=\"update_cfg('RF_display_format','unsigned_10_nofill'); show_memories_values();\">"+"\t\t<input type='radio' name='options' id='radio2-unsigned_10_nofill' autocomplete='off' >32<sub>10</sub>"+"\t </label>"+"\t <label id='label2-unsigned_8_nofill'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='register file display format: octal'"+"\t\t onclick=\"update_cfg('RF_display_format','unsigned_8_nofill'); show_memories_values();\">"+"\t\t<input type='radio' name='options' id='radio2-unsigned_8_nofill' autocomplete='off' >26<sub>8</sub>"+"\t </label>"+" </div>"+" <div class='btn-group d-flex btn-group-justified'>"+"\t <label id='label2-unsigned_16_fill'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='register file display format: hexadecimal'"+"\t\t onclick=\"update_cfg('RF_display_format','unsigned_16_fill'); show_memories_values();\">"+"\t\t<input type='radio' name='options' id='radio2-unsigned_16_fill' autocomplete='off' >001A<sub>16</sub>"+"\t </label>"+"\t <label id='label2-unsigned_10_fill'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='register file display format: decimal'"+"\t\t onclick=\"update_cfg('RF_display_format','unsigned_10_fill'); show_memories_values();\">"+"\t\t<input type='radio' name='options' id='radio2-unsigned_10_fill' autocomplete='off' >0032<sub>10</sub>"+"\t </label>"+"\t <label id='label2-unsigned_8_fill'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='register file display format: octal'"+"\t\t onclick=\"update_cfg('RF_display_format','unsigned_8_fill'); show_memories_values();\">"+"\t\t<input type='radio' name='options' id='radio2-unsigned_8_fill' autocomplete='off' >0026<sub>8</sub>"+"\t </label>"+" </div>"+"\t</div>",code_init:function(){$("#label2-"+get_cfg("RF_display_format")).button("toggle")},description:"<span data-langkey='Display format'>Display format</span> "+"<a href='#' data-toggle='popover1' title='Example of display formats' data-html='true' "+' data-content=\'<img alt="register file example" src="images/cfg-rf.gif" class="img-fluid">\'><span <span data-langkey=\'(example)\'>(example)</span></a>'});ws_info.config_ui.push({id:"radio3",type:"Register file",u_class:"user_archived",code_cfg:" <div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label3-numerical'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='register file display name (number)'"+"\t\t onclick=\"update_cfg('RF_display_name','numerical'); wepsim_show_rf_names();\">"+"\t\t<input type='radio' name='options' id='radio3-numerical' autocomplete='off' ><span data-langkey='Numbers'>Numbers</span>"+"\t </label>"+"\t <label id='label3-logical'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='register file display name (user identification)'"+"\t\t onclick=\"update_cfg('RF_display_name','logical'); wepsim_show_rf_names();\">"+"\t\t<input type='radio' name='options' id='radio3-logical' autocomplete='off' ><span data-langkey='Labels'>Labels</span>"+"\t </label>"+" </div>",code_init:function(){$("#label3-"+get_cfg("RF_display_name")).button("toggle")},description:"<span data-langkey='Register file names'>Register file names</span>"});ws_info.config_ui.push({id:"radio9",type:"Register file",u_class:"user_archived",code_cfg:"<div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label9-true'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary p-1' "+"\t\t aria-label='Is editable: true'"+"\t\t onclick=\"update_cfg('is_editable',true);\">"+"\t\t<input type='radio' name='options' id='radio9-true' aria-label='Is editable: true' autocomplete='off' >On"+"\t </label>"+"\t <label id='label9-false'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary p-1' "+"\t\t aria-label='Is editable: false'"+"\t\t onclick=\"update_cfg('is_editable',false);\">"+"\t\t<input type='radio' name='options' id='radio9-false' aria-label='Is editable: false' autocomplete='off' >Off"+"\t </label>"+"\t</div>",code_init:function(){$("#label9-"+get_cfg("is_editable")).button("toggle")},description:"<span data-langkey='Editable registers: edit register file values'>Editable registers: edit register file values</span>"});ws_info.config_ui.push({id:"colorpicker1",type:"Circuitry simulation",u_class:"user_microcode",code_cfg:"<fieldset data-role='controlgroup' data-type='horizontal' data-mini='true' style='margin:0 0 0 0'>"+"\t <input type='color'"+"\t\taria-label='Color for active data'"+"\t\tid='colorpicker1'"+"\t\tdata-show-value='false'"+"\t\tclass='noshadow-d m-0' "+"\t\tonchange=\"update_cfg('color_data_active', $('#colorpicker1').spectrum('get')); refresh();\">"+"</fieldset>",code_init:function(){$("#colorpicker1").spectrum({preferredFormat:"hex",color:get_cfg("color_data_active")})},description:"<span data-langkey='Data-path color'>Data-path color</span> <a href='#' data-toggle='popover1' title='Example of data-path color' data-html='true' data-content='<img alt=\"register file example\" src=\"images/cfg-colors.gif\" class=\"img-fluid\">'><span <span data-langkey='(example)'>(example)</span></a>"});ws_info.config_ui.push({id:"colorpicker2",type:"Circuitry simulation",u_class:"user_microcode",code_cfg:"<fieldset data-role='controlgroup' data-type='horizontal' data-mini='true' style='margin:0 0 0 0'>"+"\t <input type='color'"+"\t\taria-label='Color for active signal name'"+"\t\tid='colorpicker2'"+"\t\tdata-show-value='false'"+"\t\tclass='noshadow-d m-0' "+"\t\tonchange=\"update_cfg('color_name_active', $('#colorpicker2').spectrum('get')); refresh();\">"+"\t </fieldset> ",code_init:function(){$("#colorpicker2").spectrum({preferredFormat:"hex",color:get_cfg("color_name_active")})},description:"<span data-langkey='Signal color'>Signal color</span>"});ws_info.config_ui.push({id:"radio10",type:"Circuitry simulation",u_class:"user_archived user_microcode",code_cfg:" <div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label10-true'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Is by value: true'"+"\t\t onclick=\"update_cfg('is_byvalue',true);\">"+"\t\t<input type='radio' name='options' id='radio10-true' autocomplete='off' >Value"+"\t </label>"+"\t <label id='label10-false'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Is by value: false'"+"\t\t onclick=\"update_cfg('is_byvalue',false);\">"+"\t\t<input type='radio' name='options' id='radio10-false' autocomplete='off' >Activation"+"\t </label>"+"\t</div> ",code_init:function(){$("#label10-"+get_cfg("is_byvalue")).button("toggle")},description:"<span data-langkey='Show by value or by activation'>Show by value or by activation</span>"});ws_info.config_ui.push({id:"radio5",type:"Circuitry simulation",u_class:"user_microcode",code_cfg:"<div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label5-true'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Is interactive: true'"+"\t\t onclick=\"update_cfg('is_interactive',true);\">"+"\t\t<input type='radio' name='options' id='radio5-true' autocomplete='off' >On"+"\t </label>"+"\t <label id='label5-false'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Is interactive: false'"+"\t\t onclick=\"update_cfg('is_interactive',false);\">"+"\t\t<input type='radio' name='options' id='radio5-false' autocomplete='off' >Off"+"\t </label>"+"\t</div> ",code_init:function(){$("#label5-"+get_cfg("is_interactive")).button("toggle")},description:"<span data-langkey='Interactive mode: signal value can be updated'>Interactive mode: signal value can be updated</span>"});ws_info.config_ui.push({id:"radio6",type:"Circuitry simulation",u_class:"user_microcode",code_cfg:"<div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label6-true'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Is quick interactive: true'"+"\t\t onclick=\"update_cfg('is_quick_interactive',true);\">"+"\t\t<input type='radio' name='options' id='radio6-true' autocomplete='off' >On"+"\t </label>"+"\t <label id='label6-false'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Is quick interactive: false'"+"\t\t onclick=\"update_cfg('is_quick_interactive',false);\">"+"\t\t<input type='radio' name='options' id='radio6-false' autocomplete='off' >Off"+"\t </label>"+"\t</div> ",code_init:function(){$("#label6-"+get_cfg("is_quick_interactive")).button("toggle")},description:"<span data-langkey='Quick interactive mode: quick update of signal value'>Quick interactive mode: quick update of signal value</span>"});ws_info.config_ui.push({id:"radio11",type:"Accesibility",u_class:"user_archived",code_cfg:"<div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label11-true'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Active voice: true'"+"\t\t onclick=\"update_cfg('use_voice',true); wepsim_voice_start();\">"+"\t\t<input type='radio' name='options' id='radio11-true' autocomplete='off' >On"+"\t </label>"+"\t <label id='label11-false'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Active voice: false'"+"\t\t onclick=\"update_cfg('use_voice',false); wepsim_voice_stop();\">"+"\t\t<input type='radio' name='options' id='radio11-false' autocomplete='off' >Off"+"\t </label>"+"\t</div>",code_init:function(){$("#label11-"+get_cfg("use_voice")).button("toggle")},description:"<span data-langkey='Active voice: external voice control'>Active voice: external voice control</span>"});ws_info.config_ui.push({id:"radio13",type:"Accesibility",u_class:"user_archived",code_cfg:"<div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label13-text'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Verbose: text'"+"\t\t onclick=\"update_cfg('verbal_verbose','text');\">"+"\t\t<input type='radio' name='options' id='radio13-text' autocomplete='off' >Text"+"\t </label>"+"\t <label id='label13-math'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Verbose: math'"+"\t\t onclick=\"update_cfg('verbal_verbose','math');\">"+"\t\t<input type='radio' name='options' id='radio13-math' autocomplete='off' >Math"+"\t </label>"+"\t</div>",code_init:function(){$("#label13-"+get_cfg("verbal_verbose")).button("toggle")},description:"<span data-langkey='Verbalization: textual or mathematical'>Verbalization: textual or mathematical</span>"});ws_info.config_ui.push({id:"select8",type:"Accesibility",u_class:"",code_cfg:"<div class='form-group m-0'>"+" <select name='select8' id='select8' class='form-control form-control-sm custom-select'"+" aria-label='User Interface for WepSIM' "+" onchange=\"var opt = $(this).find('option:selected');"+" var optValue = opt.val();"+" update_cfg('ws_skin_ui', optValue);"+" window.removeEventListener('beforeunload', wepsim_confirm_exit);"+" window.location='wepsim-' + optValue + '.html';"+' return false;"'+" data-native-menu='false'>"+" <option value='classic'>Desktop</option>"+" <option value='compact'>Mobile</option>"+" </select>"+"</div>",code_init:function(){$("#select8").val(get_cfg("ws_skin_ui"))},description:"<span data-langkey='WepSIM User Interface skin'>WepSIM User Interface skin</span>"});ws_info.config_ui.push({id:"radio14",type:"Accesibility",u_class:"",code_cfg:"<div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label14-only_asm__of__only_frequent__on'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary p-1' "+" aria-label='User Interface set of features for WepSIM: false' "+"\t\t onclick=\"var optValue = 'only_asm:of:only_frequent:on';"+"\t\t update_cfg('ws_skin_user', optValue);"+' wepsim_restore_view(optValue);">'+"\t\t<input type='radio' name='options' id='radio14-false' aria-label='Is expert: false' autocomplete='off' >On"+"\t </label>"+"\t <label id='label14-only_asm__of__only_frequent__of'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary p-1' "+" aria-label='User Interface set of features for WepSIM: true' "+"\t\t onclick=\"var optValue = 'only_asm:of:only_frequent:of';"+"\t\t update_cfg('ws_skin_user', optValue);"+' wepsim_restore_view(optValue);">'+"\t\t<input type='radio' name='options' id='radio14-true' aria-label='Is expert: true' autocomplete='off' >Off"+"\t </label>"+"\t</div>",code_init:function(){var optValue=get_cfg("ws_skin_user");$("#label14-"+optValue.replace(/:/g,"__")).button("toggle")},description:"<span data-langkey='Beginner view'>Beginner view</span>"});ws_info.config_ui.push({id:"radio16",type:"Accesibility",u_class:"",code_cfg:"<div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label16-true'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary p-1' "+" aria-label='AutoScrolling: true' "+'\t\t onclick="var optValue = true;'+"\t\t update_cfg('AS_enable', optValue);\">"+"\t\t<input type='radio' name='options' id='radio16-true' aria-label='AutoScroll: true' autocomplete='off' >On"+"\t </label>"+"\t <label id='label16-false'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary p-1' "+" aria-label='AutoScrolling: false' "+'\t\t onclick="var optValue = false;'+"\t\t update_cfg('AS_enable', optValue);\">"+"\t\t<input type='radio' name='options' id='radio16-false' aria-label='AutoScroll: false' autocomplete='off' >Off"+"\t </label>"+"\t</div>",code_init:function(){var optValue=get_cfg("AS_enable");$("#label16-"+optValue).button("toggle")},description:"<span data-langkey='Auto-scroll while executing'>Auto-scroll while executing</span>"});ws_info.config_ui.push({id:"radio17",type:"Privacy",u_class:"",code_cfg:"<div class='btn-group btn-group-toggle d-flex' data-toggle='buttons' >"+"\t <label id='label17-true'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Use Google Analytics: true'"+"\t\t onclick=\"update_cfg('use_ga', true);\">"+"\t\t<input type='radio' name='options' id='radio17-true' autocomplete='off' >On"+"\t </label>"+"\t <label id='label17-false'"+"\t\t class='btn btn-sm btn-light w-50 btn-outline-secondary' style='padding:2 2 2 2;'"+"\t\t aria-label='Use Google Analytics: false'"+"\t\t onclick=\"update_cfg('use_ga', false);\">"+"\t\t<input type='radio' name='options' id='radio17-false' autocomplete='off' >Off"+"\t </label>"+"\t</div> ",code_init:function(){$("#label17-"+get_cfg("use_ga")).button("toggle")},description:"<span data-langkey='Use of Google Analytics to obtain anonymous statistics on the use of the application'>Use of Google Analytics to obtain anonymous statistics on the use of the application</span>"});ws_info.examples=[];ws_info.example_set=[{name:"Empty",url:"",url_base_asm:"",url_base_mc:""}];ws_info.example_active=-1;function wepsim_example_reset(){ws_info.examples=[];ws_info.example_active=-1;webui_toolbar_updateExampleSet()}function wepsim_example_load(e_name){var jobj=null;for(var i=0;i<ws_info.example_set.length;i++){if(ws_info.example_set[i].name.toUpperCase()!==e_name.toUpperCase()){continue}if(typeof ws_info.example_set[i].url==="undefined"){continue}jobj=wepsim_url_getJSON(ws_info.example_set[i].url);ws_info.examples=ws_info.examples.concat(jobj);ws_info.example_active=i}webui_toolbar_updateExampleSet();return ws_info.examples}function wepsim_example_loadSet(url_example_set,set_name){ws_info.example_set=wepsim_url_getJSON(url_example_set);return ws_info.example_set}function wepsim_example_getSet(){return ws_info.example_set}function load_from_example_assembly(example_id,chain_next_step){if(-1==ws_info.example_active){ws_alert("warning: no active example set");return}inputasm.setValue("Please wait...");inputasm.refresh();var sid=example_id.split(":");var sample_hw="";if(sid.length>0)sample_hw=sid[0];else console.log("warning: example without hardware id");var sample_mc="";if(sid.length>1)sample_mc=sid[1];else console.log("warning: example without microcode id");var sample_asm="";if(sid.length>2)sample_asm=sid[2];else console.log("warning: example without assembly id");var url=ws_info.example_set[ws_info.example_active].url_base_asm+"asm-"+sample_asm+".txt";var do_next=function(mcode){inputasm.setValue(mcode);inputasm.refresh();var ok=false;var SIMWARE=get_simware();if(SIMWARE.firmware.length!==0){ok=wepsim_compile_assembly(mcode);inputasm.is_compiled=ok}if(false===ok){wsweb_change_workspace_assembly();return}if(true===chain_next_step){setTimeout((function(){wsweb_change_workspace_simulator()}),50)}setTimeout((function(){show_memories_values()}),500);wepsim_notify_success("<strong>INFO</strong>","Example ready to be used.")};wepsim_load_from_url(url,do_next);simcore_record_append_new("Load assembly from example "+example_id,'load_from_example_assembly("'+example_id+'", '+chain_next_step+");\n");simcore_ga("example","example.assembly","example.assembly."+sample_hw+"."+sample_asm)}function load_from_example_firmware(example_id,chain_next_step){if(-1==ws_info.example_active){ws_alert("warning: no active example set");return}inputfirm.setValue("Please wait...");inputfirm.refresh();var sid=example_id.split(":");var sample_hw="";if(sid.length>0)sample_hw=sid[0];else console.log("warning: example without hardware id");var sample_mc="";if(sid.length>1)sample_mc=sid[1];else console.log("warning: example without microcode id");var sample_asm="";if(sid.length>2)sample_asm=sid[2];else console.log("warning: example without assembly id");var url=ws_info.example_set[ws_info.example_active].url_base_mc+"mc-"+sample_mc+".txt";inputfirm.setOption("readOnly",false);var do_next=function(mcode){inputfirm.setValue(mcode);inputfirm.refresh();var ok=wepsim_compile_firmware(mcode);inputfirm.is_compiled=ok;if(false===ok){wsweb_change_workspace_microcode();return}if(true===chain_next_step){setTimeout((function(){load_from_example_assembly(example_id,chain_next_step)}),50)}else{setTimeout((function(){show_memories_values();asmdbg_update_assembly()}),50);wepsim_notify_success("<strong>INFO</strong>","Example ready to be used.")}};wepsim_load_from_url(url,do_next);simcore_record_append_new("Load firmware from example "+example_id,'load_from_example_firmware("'+example_id+'", false);\n');simcore_ga("example","example.firmware","example.firmware."+sample_hw+"."+sample_mc)}function share_example(m,base_url){var e_description=ws_info.examples[m].description;e_description=e_description.replace(/<[^>]+>/g,"");var e_id=ws_info.examples[m].id;var e_hw=ws_info.examples[m].hardware;var share_title="WepSIM example "+e_id+"...";var share_text="This is a link to the WepSIM example "+e_id+" ("+e_description+"):\n";var share_url=""+base_url+"?mode="+e_hw+"&examples_set="+ws_info.example_set[ws_info.example_active].name+"&example="+m;return share_information("example_"+m,share_title,share_text,share_url)}function wepsim_help_set(type,ref){$("#help1_ref").attr("components",type+":"+ref);simcore_record_append_new("Update help content",'wepsim_help_set("'+type+'", "'+ref+'");\n')}function request_html_url(r_url){var robj=null;if(false===is_mobile()){if(navigator.onLine)robj=fetch(r_url);else robj=caches.match(r_url).then()}else{robj=$.ajax(r_url,{type:"GET",dataType:"html"})}return robj}function update_div_frompartialhtml(helpdiv,key,data){var default_content="<br>Sorry, No more details available for this element.<p>\n";if(""===data)$(helpdiv).html(default_content);else $(helpdiv).html(data);if(""===data||""===key||"#"===key){return}var help_content=$(helpdiv).filter(key).html();if(typeof help_content==="undefined"){help_content=$(helpdiv).find(key).html()}if(typeof help_content==="undefined"){help_content=default_content}$(helpdiv).html(help_content)}function resolve_html_url(helpdiv,r_url,key,update_div){return request_html_url(r_url).then((function(data){if(typeof data=="object"){data.text().then((function(res){update_div_frompartialhtml(helpdiv,key,res);update_div()}))}else{update_div_frompartialhtml(helpdiv,key,data);update_div()}}))}function update_signal_loadhelp(helpdiv,simhw,key){var curr_idiom=get_cfg("ws_idiom");var help_base="examples/hardware/"+simhw+"/help/signals-"+curr_idiom+".html";resolve_html_url(helpdiv,help_base,"#"+key,(function(){$(helpdiv).trigger("create")}));simcore_ga("help","help.signal","help.signal."+simhw+"."+key)}function update_checker_loadhelp(helpdiv,key){var curr_idiom=get_cfg("ws_idiom");var help_base="help/simulator-"+curr_idiom+".html";resolve_html_url(helpdiv,help_base,"#"+key,(function(){$(helpdiv).trigger("create")}));simcore_ga("help","help.checker","help.checker."+key)}ws_info.help=[{id:"simulator",title:"Execute example",u_type:"tutorial",u_class:"",reference:"wsweb_dialog_close('help'); "+"wsweb_recordbar_show(); "+"wepsim_checkpoint_loadExample('tutorial_2.txt') ; "+"setTimeout(wsweb_record_play, 1000);",description:"<span data-langkey='help_01_03'>Play the execute example tutorial</span>.<br>"},{id:"simulator",title:"Welcome tutorial",u_type:"tutorial",u_class:"",reference:"wsweb_dialog_close('help'); "+"sim_tutorial_showframe('welcome', 0);",description:"<span data-langkey='help_01_01'>Open the welcome tutorial</span>.<br>"},{id:"simulator",title:"Simple usage tutorial",u_type:"tutorial",u_class:"",reference:"wsweb_dialog_close('help'); "+"sim_tutorial_showframe('simpleusage', 0);",description:"<span data-langkey='help_01_02'>Open the simple usage tutorial, for microprogramming and assembly programming</span>.<br>"},{id:"simulator",title:"Simulator: firmware",u_type:"simulator",u_class:"user_microcode",reference:"wepsim_help_set('relative', 'simulator#help_simulator_firmware');",description:"<span data-langkey='help_02_01'>How to work with the firmware to be loaded into the control memory</span>.<br>"},{id:"microcode",title:"Microcode format",u_type:"simulator",u_class:"user_microcode",reference:"wepsim_help_set('relative', 'simulator#help_firmware_format');",description:"<span data-langkey='help_02_02'>Syntax of the microcode used</span>.<br>"},{id:"simulator",title:"Simulator: assembly",u_type:"simulator",u_class:"",reference:"wepsim_help_set('relative', 'simulator#help_simulator_assembly');",description:"<span data-langkey='help_02_03'>How to work with the assembly that use the aforementioned firmware</span>.<br>"},{id:"assembly",title:"Assembly format",u_type:"simulator",u_class:"",reference:"wepsim_help_set('relative', 'simulator#help_assembly_format');",description:"<span data-langkey='help_02_04'>Syntax of the assembly elements</span>.<br>"},{id:"simulator",title:"Simulator: execution",u_type:"simulator",u_class:"",reference:"wepsim_help_set('relative', 'simulator#help_simulator_execution');",description:"<span data-langkey='help_02_05'>How the simulator can execute the assembly and firmware</span>.<br>"},{id:"simulator",title:"Simulator: states",u_type:"simulator",u_class:"",reference:"wepsim_help_set('relative', 'simulator#help_dumper');",description:"<span data-langkey='help_02_06'>How the simulator can show the current state, and the difference between two states</span>.<br>"},{id:"architecture",title:"Simulated architecture",u_type:"simulated processor",u_class:"",reference:"wepsim_help_set('absolute', 'hardware');",description:"<span data-langkey='help_03_01'>Description of the simulated processor architecture</span>.<br>"},{id:"architecture",title:"Simulated signals",u_type:"simulated processor",u_class:"user_microcode",reference:"wepsim_help_set('absolute', 'signals');",description:"<span data-langkey='help_03_02'>Main signals summary of the simulated elemental processor</span>.<br>"},{id:"architecture",title:"Hardware summary",u_type:"simulated processor",u_class:"user_microcode",reference:"wepsim_help_set('code', 'hardware_summary');",description:"<span data-langkey='help_03_03'>Reference card for the simulated elemental processor hardware</span>.<br>"},{id:"architecture",title:"Assembly summary",u_type:"simulated processor",u_class:"",reference:"wepsim_help_set('code', 'assembly_summary');",description:"<span data-langkey='help_03_04'>Reference card for the simulated elemental processor instruction set</span>.<br>"},{id:"about",title:"License, platforms, etc.",u_type:"info",u_class:"",reference:"wepsim_help_set('relative', 'about#help_about');",description:"<span data-langkey='help_04_01'>WepSIM license, supported platforms, technologies used</span>.<br>"},{id:"authors",title:"Authors",u_type:"info",u_class:"",reference:"wsweb_dialog_close('help'); "+"wsweb_dialog_open('about');",description:"<span data-langkey='help_04_02'>Authors of WepSIM</span>.<br>"}];ws_info.tutorials={};function sim_tutorial_goframe(tutorial_name,from_step,to_step){var tutorial=ws_info.tutorials[tutorial_name];if(typeof tutorial==="undefined"){return}tutorial[from_step].code_post();if(typeof tutbox!=="undefined"){tutbox.modal("hide")}setTimeout((function(){sim_tutorial_showframe(tutorial_name,to_step)}),tutorial[from_step].wait_next);if(simcore_voice_canSpeak()){window.speechSynthesis.cancel()}}function sim_tutorial_cancelframe(){var ws_mode=get_cfg("ws_mode");wsweb_select_main(ws_mode);tutbox.modal("hide");if(simcore_voice_canSpeak()){window.speechSynthesis.cancel()}}function sim_tutorial_showframe(tutorial_name,step){var tutorial=ws_info.tutorials[tutorial_name];if(typeof ws_info.tutorials=="undefined"){return}if(step==tutorial.length){return}if(step<0){return}simcore_ga("help","help.tutorial","help.tutorial.name="+tutorial_name+",step="+step);tutorial[step].code_pre();var wsi=get_cfg("ws_idiom");var bbbt={};bbbt.cancel={label:i18n_get("gui",wsi,"Disable tutorial mode"),className:"btn-danger col float-right",callback:function(){sim_tutorial_cancelframe()}};if(step!=0)bbbt.prev={label:i18n_get("gui",wsi,"Prev."),className:"btn-success col float-right",callback:function(){sim_tutorial_goframe(tutorial_name,step,step-1)}};if(step!=tutorial.length-1)bbbt.next={label:i18n_get("gui",wsi,"Next"),className:"btn-success col float-right",callback:function(){sim_tutorial_goframe(tutorial_name,step,step+1)}};else bbbt.end={label:i18n_get("gui",wsi,"End"),className:"btn-success col float-right",callback:function(){sim_tutorial_goframe(tutorial_name,step,step+1)}};tutbox=bootbox.dialog({title:tutorial[step].title,message:tutorial[step].message,buttons:bbbt,size:"large",animate:false});simcore_voice_speak(tutorial[step].title.replace(/<[^>]*>/g,"")+". "+tutorial[step].message.replace(/<[^>]*>/g,""));i18n_update_tags("tutorial_"+tutorial_name)}ws_info.tutorials.welcome=[{id:"welcome",title:"<span data-langkey='title_0'>title 0</span>",message:"<span data-langkey='message_0'>message 0</span>",code_pre:simcore_do_nothing_handler,code_post:simcore_do_nothing_handler,wait_next:100},{id:"welcome",title:"<span data-langkey='title_1'>title 1</span>",message:"<span data-langkey='message_1'>message 1</span>",code_pre:simcore_do_nothing_handler,code_post:simcore_do_nothing_handler,wait_next:100},{id:"welcome",title:"<span data-langkey='title_2'>title 2</span>",message:"<span data-langkey='message_2'>message 2</span>",code_pre:simcore_do_nothing_handler,code_post:simcore_do_nothing_handler,wait_next:100},{id:"welcome",title:"<span data-langkey='title_3'>title 3</span>",message:"<span data-langkey='message_3'>message 3</span>",code_pre:simcore_do_nothing_handler,code_post:simcore_do_nothing_handler,wait_next:100},{id:"welcome",title:"<span data-langkey='title_4'>title 4</span>",message:"<span data-langkey='message_4'>message 4</span>",code_pre:simcore_do_nothing_handler,code_post:simcore_do_nothing_handler,wait_next:100},{id:"welcome",title:"<span data-langkey='title_5'>title 5</span>",message:"<span data-langkey='message_5'>message 5</span>",code_pre:function(){},code_post:function(){var welcome_example="ep:ep_mips_base:ep_s1_e1";load_from_example_firmware(welcome_example,true)},wait_next:100}];ws_info.tutorials.simpleusage=[{id:"simpleusage",title:"<span data-langkey='title_0'>title 0</span>",message:"<span data-langkey='message_0'>message 0</span>",code_pre:simcore_do_nothing_handler,code_post:simcore_do_nothing_handler,wait_next:100},{id:"simpleusage",title:"<span data-langkey='title_1'>title 1</span>",message:"<span data-langkey='message_1'>message 1</span>",code_pre:simcore_do_nothing_handler,code_post:simcore_do_nothing_handler,wait_next:100},{id:"simpleusage",title:"<span data-langkey='title_2'>title 2</span>",message:"<span data-langkey='message_2'>message 2</span>",code_pre:simcore_do_nothing_handler,code_post:simcore_do_nothing_handler,wait_next:100},{id:"simpleusage",title:"<span data-langkey='title_3'>title 3</span>",message:"<span data-langkey='message_3'>message 3</span>",code_pre:simcore_do_nothing_handler,code_post:simcore_do_nothing_handler,wait_next:100},{id:"simpleusage",title:"<span data-langkey='title_4'>title 4</span>",message:"<span data-langkey='message_4'>message 4</span>",code_pre:simcore_do_nothing_handler,code_post:simcore_do_nothing_handler,wait_next:100},{id:"simpleusage",title:"<span data-langkey='title_5'>title 5</span>",message:"<span data-langkey='message_5'>message 5</span>",code_pre:simcore_do_nothing_handler,code_post:simcore_do_nothing_handler,wait_next:100}];ws_info.tours={};var ws_tour=null;function wepsim_newbie_tour(){var newbie_tour1=ws_info.tours.tour1;if(typeof newbie_tour1==="undefined"){return}var ws_idiom=get_cfg("ws_idiom");wepsim_newbie_tour_setLang(ws_idiom);if(null==ws_tour){ws_tour=introJs()}ws_tour.setOptions({steps:newbie_tour1,keyboardNavigation:true,tooltipClass:"tooltip-large",showProgress:true,showStepNumbers:true,scrollToElement:true,nextLabel:i18n_get("gui",ws_idiom,"Next"),prevLabel:i18n_get("gui",ws_idiom,"Prev."),overlayOpacity:"0.2"});ws_tour.onbeforechange((function(){newbie_tour1[this._currentStep].do_before()}));ws_tour.onexit((function(){$("#help1").modal("hide");wsweb_dialog_close("examples");wsweb_dialog_close("config");if(get_cfg("ws_mode")!="ep"){wsweb_select_main("ep")}return true}));ws_tour.start();simcore_ga("ui","ui.tour","ui.tour.newbie")}function wepsim_newbie_tour_setLang(lang){var newbie_tour1=ws_info.tours.tour1;if(typeof newbie_tour1==="undefined"){return}var step="";for(var i=0;i<newbie_tour1.length;i++){step=newbie_tour1[i].step;if(""!==step){newbie_tour1[i].intro=i18n.eltos.tour_intro[lang][step]}}}function wepsim_newbie_tour_reload(lang){set_cfg("ws_idiom",lang);save_cfg();i18n_update_tags("gui");wepsim_newbie_tour()}ws_info.tours.tour1=[{title:"WepSIM",intro:i18n_get_welcome(),step:"",position:"auto",do_before:function(){return true}},{title:"WepSIM",intro:"<span data-langkey='step1'>Step 1</span>",step:"step1",position:"auto",do_before:function(){ws_tour.refresh();return true}},{title:"WepSIM",element:"#select4",intro:"<span data-langkey='step2'>Step 2</span>",step:"step2",position:"auto",do_before:function(){wsweb_select_main("ep");ws_tour.refresh();return true}},{title:"WepSIM",element:"#btn_help1",intro:"<span data-langkey='step3'>Step 3</span>",step:"step3",position:"auto",do_before:function(){ws_tour.refresh();return true}},{title:"WepSIM",element:"#btn_example1",intro:"<span data-langkey='step4'>Step 4</span>",step:"step4",position:"auto",do_before:function(){ws_tour.refresh();return true}},{title:"WepSIM",element:"#btn_cfg1",intro:"<span data-langkey='step5'>Step 5</span>",step:"step5",position:"auto",do_before:function(){ws_tour.refresh();return true}},{title:"WepSIM",intro:"<span data-langkey='step6'>Step 6</span>",step:"step6",position:"auto",do_before:function(){ws_tour.refresh();return true}}];function wepsim_voice_init(){if(!annyang){return false}annyang.addCommands(ws_info.voice_commands);annyang.addCallback("errorNetwork",(function(){annyang.abort();alert("Sorry but some network connection is needed in order to use the voice recognition engine.")}));SpeechKITT.annyang();SpeechKITT.setStylesheet("external/speechkitt/themes/flat.css");SpeechKITT.setInstructionsText("What can I help you with? (list)");SpeechKITT.vroom();return true}function wepsim_voice_start(){if(!annyang){wepsim_notify_error("<h4>Warning:<br/>"+"annyang not available"+"</h4>","Voice support is not available in this platform.");return false}SpeechKITT.show();return true}function wepsim_voice_stop(){if(!annyang){return false}SpeechKITT.hide();return true}ws_info.voice_commands={};var wepsim_voice_dialog=null;ws_info.voice_commands["hello"]=function(){var msg="Hello, I am WepSIM, nice to meet you. ";simcore_voice_speak(msg)};ws_info.voice_commands["(show) configuration"]=function(){wsweb_dialog_open("config")};ws_info.voice_commands["(show) examples"]=function(){wsweb_dialog_open("examples")};ws_info.voice_commands["load example :id (from) :level"]=function(id,level){var ex_id=parseInt(id);var ex_lv=parseInt(level);load_from_example_firmware("ep:s"+ex_lv+"_e"+ex_lv,true)};ws_info.voice_commands["(show) help"]=function(){wsweb_dialog_open("help")};ws_info.voice_commands["close"]=function(){wsweb_dialog_close("help");wsweb_dialog_close("config");wsweb_dialog_close("examples");if(null!==wepsim_voice_dialog){wepsim_voice_dialog.modal("hide")}};ws_info.voice_commands["reset"]=function(){wepsim_execute_reset(true,true);var msg="Current processor has been reset.";simcore_voice_speak(msg)};ws_info.voice_commands["next"]=function(){wepsim_execute_instruction();var msg="Next executed.";simcore_voice_speak(msg)};ws_info.voice_commands["next micro(instruction)"]=function(){wepsim_execute_microinstruction();var msg="Next microinstruction executed. ";simcore_voice_speak(msg)};ws_info.voice_commands["play"]=function(){wepsim_execute_play()};ws_info.voice_commands["stop"]=function(){wepsim_execute_stop()};ws_info.voice_commands["describe micro(instruction)"]=function(){var msg=get_verbal_from_current_mpc();simcore_voice_speak(msg)};ws_info.voice_commands["describe instruction"]=function(){var msg=get_verbal_from_current_pc();simcore_voice_speak(msg)};ws_info.voice_commands["list"]=function(){var vc_list="available commands:<br>";for(var vc in ws_info.voice_commands){vc_list=vc_list+" * '"+vc+"'<br>"}wepsim_voice_dialog=bootbox.alert(vc_list);wepsim_voice_dialog.modal("show");var msg=$("</p>").html(vc_list).text();simcore_voice_speak(msg)};ws_info.voice_commands["silence"]=function(){simcore_voice_stopSpeak()};ws_info.breakpoint_icon_list={classic:{type:"classic",addclass:"no-dark-mode",origin:"https://www.optikunde.de/farbe/rot.php"},pushpin:{type:"classic",addclass:"no-dark-mode",origin:"http://clipart-library.com/red-push-pin.html"},cat1:{type:"pets",addclass:"no-dark-mode",origin:""},dog1:{type:"pets",addclass:"no-dark-mode",origin:""},halloween1:{type:"halloween",addclass:"no-dark-mode",origin:"https://es.vexels.com/svg-png/halloween/"},halloween2:{type:"halloween",addclass:"no-dark-mode",origin:"https://es.vexels.com/png-svg/vista-previa/153871/casa-de-halloween-de-miedo"},xmas1:{type:"christmas",addclass:"",origin:"https://week-of-icons-2018.netlify.com/data/5/animations/1.gif"},xmas2:{type:"christmas",addclass:"",origin:"https://week-of-icons-2018.netlify.com/data/5/animations/3.gif"},xmas3:{type:"christmas",addclass:"",origin:"https://peaceartsite.com/images/stained-glass-snowy-peace-t.gif"},r2d2:{type:"star wars",addclass:"",origin:"https://imgur.com/gallery/gKSmy"},sw:{type:"star wars",addclass:"",origin:"https://i2.wp.com/icons.iconarchive.com/icons/sensibleworld/starwars/1024/Death-Star-icon.png"},bb8:{type:"star wars",addclass:"no-dark-mode",origin:""},vader1:{type:"star wars",addclass:"",origin:""},ds1:{type:"star wars",addclass:"",origin:"https://media0.giphy.com/media/SVhnmDDdOzrZC/source.gif"},lotr4:{type:"lotr",addclass:"no-dark-mode",origin:"http://www.cinecollectibles.com/gentle-giant-c-1_62.html"},lotr2:{type:"lotr",addclass:"no-dark-mode",origin:"https://www.forbes.com/sites/adrianbridgwater/2016/01/15/microsoft-r-one-big-data-tool-to-rule-them-all/"},lotr6:{type:"lotr",addclass:"no-dark-mode",origin:"https://pm1.narvii.com/5903/f831ee80d012b8a8ba7156c39505cc4824889901_128.jpg"},hp1:{type:"harry potter",addclass:"no-dark-mode",origin:"http://www.logosclicks.com/logos/harry-potter-name-logo-46a93c.html"},hp2:{type:"harry potter",addclass:"no-dark-mode",origin:"https://www.flaticon.com/free-icon/harry-potter_86485"},hp3:{type:"harry potter",addclass:"no-dark-mode",origin:"https://lafrikileria.com/es/cosas-de-harry-potter-regalos/20569-funko-pop-patronus-harry-potter-889698469944.html"},super:{type:"films",addclass:"no-dark-mode",origin:"https://worldvectorlogo.com/logo/superman-3"},batman:{type:"films",addclass:"",origin:"http://getwallpapers.com/collection/black-and-white-batman-wallpaper"},grail:{type:"films",addclass:"no-dark-mode",origin:"http://3png.com/a-31243892.html"},despicable:{type:"films",addclass:"no-dark-mode",origin:"https://www.helloforos.com/t/cerrado/350821/81"},t800b:{type:"films",addclass:"no-dark-mode",origin:"https://www.pngegg.com/en/png-buhsk"},t1000a:{type:"films",addclass:"no-dark-mode",origin:"https://i0.pngocean.com/files/328/174/569/the-terminator-sticker-t-1000-telegram-world-of-tanks-suren-mnatsakanyan-street.jpg"}};function sim_core_breakpointicon_get(icon_name){var icon_obj=null;icon_obj=ws_info.breakpoint_icon_list[icon_name];if(typeof icon_obj==="undefined"){icon_name="classic";icon_obj=ws_info.breakpoint_icon_list[icon_name]}return"<img alt='stop icon' height=22 "+" class='"+icon_obj.addclass+"' "+" src='images/stop/stop_"+icon_name+".gif'>"}