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) · 63.3 KB
/
min.wepsim_core.js
File metadata and controls
1 lines (1 loc) · 63.3 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;var load_example_assembly=""==hash.asm?true:false;load_from_example_firmware(example_uri,load_example_assembly);return"<li>Example titled <strong>"+example_obj.title+"</strong> has been loaded.</li> "}},{name:"mc",action:function(hash){var result_txt="";var mc_code="";try{if("cache"==hash.mc){var cpts=wepsim_checkpoint_backup_load();if(cpts.length!=0)mc_code=cpts[0].firmware}else{mc_code=LZString.decompressFromEncodedURIComponent(hash.mc)}result_txt=" has been loaded"}catch(e){mc_code="";result_txt=" could not be loaded"}if(""!=mc_code){inputfirm.setValue(mc_code);inputfirm.refresh()}return"<li><b>Microcode from URI</b> "+result_txt+".</li>"}},{name:"asm",action:function(hash){var result_txt="";var asm_code="";try{if("cache"==hash.asm){var cpts=wepsim_checkpoint_backup_load();if(cpts.length!=0)asm_code=cpts[0].assembly}else{asm_code=LZString.decompressFromEncodedURIComponent(hash.asm)}result_txt=" has been loaded"}catch(e){asm_code="";result_txt=" could not be loaded"}if(""!=asm_code){inputasm.setValue(asm_code);inputasm.refresh();if(""!=hash.example)setTimeout((function(){wsweb_firmware_compile();wsweb_assembly_compile()}),500)}return"<li><b>Assembly from URI</b> "+result_txt+".</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-bs-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_text)}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-bs-toggle="buttons">';obj_wsbackup=obj_wsbackup.reverse();for(i=0;i<obj_wsbackup.length;i++){o+='<label data-bs-toggle="list" '+' class="list-group-item btn btn-white border-dark text-truncate rounded-1">'+' <input type="radio" name="browserCacheElto" '+' id="'+i+'" autocomplete="off" class="btn-check" '+">"+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 bg-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 bg-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()}user_input=parseInt(user_input);wepsim_update_signal_with_value(key,user_input);wsweb_dialogbox_close_updatesignal()}},close:{label:'<i class="fa fa-times me-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 btn-close border-0");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 buttons={};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}};var ret=simcore_check_if_can_continue();if(ret.ok){buttons.continue={label:"<span data-langkey='Continue'>Continue</span>",className:"btn btn-secondary col float-left shadow-none mr-auto",callback:function(){wsweb_dlg_close(dlg_obj);wsweb_execution_run();return true}}}buttons.close={label:"<span data-langkey='Close'>Close</span>",className:"btn-primary col float-right shadow-none"};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:buttons,size:"",onshow:function(){}};wsweb_dlg_open(dlg_obj);return true}function wepsim_memdashboard_notify_offcanvas(ref_mdash,notif_origin,notifications,skip1st){var k=1;if(skip1st)k++;var dialog_title="Notify @ 0x"+parseInt(notif_origin).toString(16)+":<br>"+ref_mdash.notify[k];var dialog_msg='<div style="max-height:80vh; width:inherit; overflow:auto; -webkit-overflow-scrolling:touch;">';while(k<notifications){dialog_msg+=ref_mdash.notify[k]+"\n<br>";k++}dialog_msg+="</div>";var dialog_footer='<span class="row m-2">'+'<button class="btn btn-danger col me-2"'+' onclick="wepsim_execute_stop();'+" wepsim_offcanvas_hide('offcvs3');"+' return false;">'+'<span data-langkey="Stop">Stop</span></button>'+'<button class="btn btn-success col"'+" onclick=\"wepsim_offcanvas_hide('offcvs3');"+" setTimeout(wepsim_execute_chainplay,"+" get_cfg('DBG_delay'),"+" wepsim_execute_stop);"+' return false;">'+'<span data-langkey="Continue">Continue</span></button>'+"</span>";wepsim_offcanvas_set_content("offcvs3",dialog_title,false,dialog_msg,dialog_footer);wepsim_offcanvas_show("offcvs3");return false}function wepsim_memdashboard_notify_dialogbox(ref_mdash,notif_origin,notifications,skip1st){var k=1;if(skip1st)k++;var dialog_title="Notify @ 0x"+parseInt(notif_origin).toString(16)+": "+ref_mdash.notify[k];var dialog_msg='<div style="max-height:70vh; width:inherit; overflow:auto; -webkit-overflow-scrolling:touch;">';while(k<notifications){dialog_msg+=ref_mdash.notify[k]+"\n<br>";k++}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}function wepsim_check_getnotifyoptions(firstline){var ret={showas:"offcanvas",skip1stline:false,scroll2current:false,skipme:false,panel2view:[],detail2view:[],eltos2glow:[]};var firstline_uppercase=firstline.toUpperCase();if(firstline_uppercase.includes("SHOWAS:DIALOGBOX")){ret.showas="dialogbox"}if(firstline_uppercase.includes("SKIP1ST:TRUE")){ret.skip1stline=true}if(firstline_uppercase.includes("SCROLL2CURRENT:TRUE")){ret.scroll2current=true}if(firstline_uppercase.includes("SKIPME:TRUE")){ret.skipme=true}var eltos2glow=firstline.match(/glow:\S+/g);if(eltos2glow!=null){ret.eltos2glow=eltos2glow[0].split(":")[1].split(",")}var panel2view=firstline.match(/showpanel:\S+/g);if(panel2view!=null){ret.panel2view=panel2view[0].split(":")[1]}var detail2view=firstline.match(/showdetails:\S+/g);if(detail2view!=null){ret.detail2view=detail2view[0].split(":")[1]}return ret}function wepsim_check_donotifyoptions(options){for(var i=0;i<options.eltos2glow.length;i++){simcore_record_glowing("#"+options.eltos2glow[i])}if(options.scroll2current){wsweb_change_show_asmdbg()}if(options.panel2view!=""){if(options.panel2view==="microcode"){wsweb_change_show_processor()}if(options.panel2view==="assembly"){wsweb_change_show_asmdbg()}}if(options.detail2view!=""){wsweb_set_details(options.detail2view.toUpperCase())}return false}function wepsim_check_memdashboard(ref_mdash,notif_origin){var ret=true;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){ret=get_cfg("DBG_skip_notifycolon");if(ret){return true}ret=wepsim_check_getnotifyoptions(ref_mdash.notify[1]);if(ret.skipme){return true}if("offcanvas"==ret.showas)wepsim_memdashboard_notify_offcanvas(ref_mdash,notif_origin,notifications,ret.skip1stline);else wepsim_memdashboard_notify_dialogbox(ref_mdash,notif_origin,notifications,ret.skip1stline);return wepsim_check_donotifyoptions(ret)}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 fetch_maddr=0;var i_clks=0;var i=0;fetch_maddr=0;for(var k in curr_firm.labels_firm){if("fetch"==curr_firm.labels_firm[k])fetch_maddr=k}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(fetch_maddr==reg_maddr&&false==ref_mdash.is_native||fetch_maddr!=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;var dbg_limit_ins=get_cfg("DBG_limitins");if(DBG_limit_instruction>dbg_limit_ins&&dbg_limit_ins>0){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:1024;">');$("body").append(ac)}var btn1=$('<button type="button" class="btn-close border border-secondary float-end" 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:mips_s4e1",asm_rv32:"ep:ep_rv32:rv32_s7e2",asm_z80:"ep:ep_z80:z80_s7e3"};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("tour2");return true}return true}function share_information(info_shared,share_title,share_text,share_url){if(typeof navigator.share!=="undefined"){return share_uri(info_shared,share_title,share_text,share_url)}var msg='<div id="qrcode1" class="mx-auto"></div>'+"<br>"+"You can use the following link:<br>"+'<textarea id="qrcode2" class="form-control" row="5" '+' style="width: 100%; height:100%"'+' onclick="navigator.clipboard.writeText(this.value);">'+share_url+"</textarea>"+'<span class="btn btn-sm btn-success" '+" onclick=\"var c = document.getElementById('qrcode2').value;"+' navigator.clipboard.writeText(c);">Copy to clipboard</span>'+"<br>";wsweb_dlg_alert(msg);try{$("#qrcode1").html("You can use the following QR-code:<br>");var qrcode=new QRCode("qrcode1");qrcode.makeCode(share_url)}catch(e){$("#qrcode1").html("You can use the following link:<br>"+share_url)}return true}function share_as_uri(share_eltos){var url_to_share="";var txt_enc="";try{url_to_share=get_cfg("base_url")+"?mode="+get_cfg("ws_mode");if(share_eltos.includes("mc")){txt_enc=LZString.compressToEncodedURIComponent(inputfirm.getValue());url_to_share=url_to_share+"&mc="+txt_enc}if(share_eltos.includes("asm")){txt_enc=LZString.compressToEncodedURIComponent(inputasm.getValue());url_to_share=url_to_share+"&asm="+txt_enc}}catch(e){url_to_share=""}return url_to_share}function share_uri(info_shared,share_title,share_text,share_url){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);setTimeout(wepsim_tooltips_closeAll,500)},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("mx-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 me-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}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].aliases.includes(e_name)==false){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 example_id2hash(example_id){var eltos={sample_hw:"",sample_mc:"",sample_asm:""};var sid=example_id.split(":");if(sid.length>0)eltos.sample_hw=sid[0];else console.log("warning: example without hardware id\n"+" * example id: "+example_id+"\n"+" * expected id: *ep*:microcode_X:assembly_Y\n");if(sid.length>1)eltos.sample_mc=sid[1]+".mc";else console.log("warning: example without microcode id\n"+" * example id: "+example_id+"\n"+" * expected id: ep:*microcode_X*:assembly_Y\n");if(sid.length>2)eltos.sample_asm=sid[2]+".asm";else console.log("warning: example without assembly id\n"+" * example id: "+example_id+"\n"+" * expected id: ep:microcode_X:*assembly_Y*\n");return eltos}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 eltos=example_id2hash(example_id);var url=ws_info.example_set[ws_info.example_active].url_base_asm+"/"+eltos.sample_asm;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."+eltos.sample_hw+"."+eltos.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();inputfirm.setOption("readOnly",false);var eltos=example_id2hash(example_id);var url=ws_info.example_set[ws_info.example_active].url_base_mc+"/"+eltos.sample_mc;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."+eltos.sample_hw+"."+eltos.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 es_name=ws_info.example_set[ws_info.example_active].name;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="+es_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:mips/ep_base.mc:mips/s1e1.asm";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;var ws_tour_name="tour1";function wepsim_newbie_tour(tour_name){var newbie_tour1=ws_info.tours[tour_name];if(typeof newbie_tour1==="undefined"){return}var ws_idiom=get_cfg("ws_idiom");wepsim_newbie_tour_setLang(tour_name,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_name=tour_name;ws_tour.start();simcore_ga("ui","ui.tour","ui.tour.newbie")}function wepsim_newbie_tour_setLang(tour_name,lang){var newbie_tour1=ws_info.tours[tour_name];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_tour_name)}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}}];ws_info.tours.tour2=[{title:"WepSIM",intro:i18n_get_welcome(),step:"",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_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 :mc_name (from) :asm_name"]=function(mc_name,asm_name){load_from_example_firmware("ep:"+mc_name+":"+asm_name,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'>"}