From c1a333f05cefba3a629a65f3f3749c083a9eeb0b Mon Sep 17 00:00:00 2001 From: Alejandro Calderon Mateos Date: Tue, 28 May 2019 21:44:18 +0200 Subject: [PATCH] 2.0.7 --- README.md | 2 +- docs/CHANGELOG.md | 3 +++ docs/manifest.webapp | 2 +- sim_core/sim_cfg.js | 2 +- wepsim/wepsim_node.sh | 2 +- wepsim/wepsim_web_classic.html | 2 +- wepsim/wepsim_web_compact.html | 2 +- wepsim/wepsim_web_pwa.js | 2 +- ws_dist/docs/CHANGELOG.md | 3 +++ ws_dist/docs/manifest.webapp | 2 +- ws_dist/index.html | 2 +- ws_dist/manifest.webapp | 2 +- ws_dist/min.sim_all.js | 2 +- ws_dist/min.wepsim_node.js | 2 +- ws_dist/min.wepsim_web_pwa.js | 2 +- ws_dist/wepsim-classic.html | 2 +- ws_dist/wepsim-compact.html | 2 +- ws_dist/wepsim_node.sh | 2 +- 18 files changed, 22 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 812af2e21..c42a51c70 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ * A nightly build version is available too: https://acaldero.github.io/wepsim + From Linux/Unix command line (Node 8.10.0+ and Bash 4.4.19+): - * wget https://github.com/acaldero/wepsim/releases/download/v2.0.6/wepsim-2.0.6.zip + * wget https://github.com/acaldero/wepsim/releases/download/v2.0.7/wepsim-2.0.7.zip * unzip wepsim-202.zip * cd wepsim * ./wepsim_node.sh diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index de51f13cb..93efee9af 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,4 +1,7 @@ +2.0.5 -> 2.0.7: +* Improved translation subsystem + 2.0.5 -> 2.0.6: * Initial support for the WepSIM control API * Initial support for recording diff --git a/docs/manifest.webapp b/docs/manifest.webapp index 739d996ee..4c125780e 100644 --- a/docs/manifest.webapp +++ b/docs/manifest.webapp @@ -1,5 +1,5 @@ { - "version": "2.0.6", + "version": "2.0.7", "name": "WepSIM", "description": "The Web Elemental Processor Simulator", "launch_path": "/index.html", diff --git a/sim_core/sim_cfg.js b/sim_core/sim_cfg.js index 95707ab87..7227a5189 100644 --- a/sim_core/sim_cfg.js +++ b/sim_core/sim_cfg.js @@ -20,7 +20,7 @@ var WSCFG = {} ; - WSCFG.version = { value:"2.0.6", type:"string"} ; + WSCFG.version = { value:"2.0.7", type:"string"} ; function get_cfg ( field ) { diff --git a/wepsim/wepsim_node.sh b/wepsim/wepsim_node.sh index b026fd4fe..babad7cc1 100755 --- a/wepsim/wepsim_node.sh +++ b/wepsim/wepsim_node.sh @@ -23,7 +23,7 @@ { console.log('') ; console.log('WepSIM-cl v1.5') ; - console.log('+ WepSIM simulator v2.0.6 interface for command line.') ; + console.log('+ WepSIM simulator v2.0.7 interface for command line.') ; console.log('') ; console.log('Usage:') ; console.log(' * ./wepsim_node.sh [] [options*]') ; diff --git a/wepsim/wepsim_web_classic.html b/wepsim/wepsim_web_classic.html index 347d514bc..116a80b0a 100644 --- a/wepsim/wepsim_web_classic.html +++ b/wepsim/wepsim_web_classic.html @@ -148,7 +148,7 @@ - + diff --git a/wepsim/wepsim_web_compact.html b/wepsim/wepsim_web_compact.html index c49fa9557..239f4f8bf 100644 --- a/wepsim/wepsim_web_compact.html +++ b/wepsim/wepsim_web_compact.html @@ -148,7 +148,7 @@ - + diff --git a/wepsim/wepsim_web_pwa.js b/wepsim/wepsim_web_pwa.js index 28cd11348..0b101a865 100644 --- a/wepsim/wepsim_web_pwa.js +++ b/wepsim/wepsim_web_pwa.js @@ -23,7 +23,7 @@ * cache versioning */ -var cacheName = 'v206b_static'; +var cacheName = 'v207a_static'; /* diff --git a/ws_dist/docs/CHANGELOG.md b/ws_dist/docs/CHANGELOG.md index de51f13cb..93efee9af 100644 --- a/ws_dist/docs/CHANGELOG.md +++ b/ws_dist/docs/CHANGELOG.md @@ -1,4 +1,7 @@ +2.0.5 -> 2.0.7: +* Improved translation subsystem + 2.0.5 -> 2.0.6: * Initial support for the WepSIM control API * Initial support for recording diff --git a/ws_dist/docs/manifest.webapp b/ws_dist/docs/manifest.webapp index 739d996ee..4c125780e 100644 --- a/ws_dist/docs/manifest.webapp +++ b/ws_dist/docs/manifest.webapp @@ -1,5 +1,5 @@ { - "version": "2.0.6", + "version": "2.0.7", "name": "WepSIM", "description": "The Web Elemental Processor Simulator", "launch_path": "/index.html", diff --git a/ws_dist/index.html b/ws_dist/index.html index 347d514bc..116a80b0a 100644 --- a/ws_dist/index.html +++ b/ws_dist/index.html @@ -148,7 +148,7 @@ - + diff --git a/ws_dist/manifest.webapp b/ws_dist/manifest.webapp index 739d996ee..4c125780e 100644 --- a/ws_dist/manifest.webapp +++ b/ws_dist/manifest.webapp @@ -1,5 +1,5 @@ { - "version": "2.0.6", + "version": "2.0.7", "name": "WepSIM", "description": "The Web Elemental Processor Simulator", "launch_path": "/index.html", diff --git a/ws_dist/min.sim_all.js b/ws_dist/min.sim_all.js index 9dca2f05d..e64c895a4 100644 --- a/ws_dist/min.sim_all.js +++ b/ws_dist/min.sim_all.js @@ -1 +1 @@ -var sim={systems:[],active:null,index:0};function simhw_add(a){sim.systems.push(a);sim.active=a;sim.index=sim.systems.length-1;check_behavior();compile_behaviors();firedep_to_fireorder(jit_fire_dep);compute_references();compile_verbals()}function simhw_getActive(){return sim.index}function simhw_setActive(a){if((a>=0)&&(sim.systems.length>=a)){sim.active=sim.systems[a];sim.index=a}compile_behaviors();firedep_to_fireorder(jit_fire_dep);compute_references();compile_verbals()}function simhw_getIdByName(d){for(var a=0;a>>0).toString(16)}function check_behavior(){if(0==simhw_sim_signals().length){alert("ALERT: empty signals!!!")}if(0==simhw_sim_states().length){alert("ALERT: empty states!!!")}for(var k in simhw_sim_signals()){for(var h in simhw_sim_signal(k).behavior){var a=simhw_sim_signal(k).behavior[h].split(";");for(var g=0;g "+d[0]+" ("+e+")");return}if(d.length!=simhw_syntax_behavior(d[0]).nparameters){alert("ALERT: Behavior has an incorrect number of elements --> "+e+"/"+simhw_syntax_behavior(d[0]).nparameters);return}for(var f=1;f '"+e);return}else{if(("S"==m)&&(typeof simhw_sim_signal(n[0])=="undefined")){alert("ALERT: Behavior has an undefined reference to a signal -> '"+e);return}else{if(("X"==m)&&(typeof simhw_sim_state(n[0])=="undefined")&&(typeof simhw_sim_signal(n[0])=="undefined")){alert("ALERT: Behavior has an undefined reference to a object state OR signal -> '"+e);return}}}}}}}}var jit_behaviors=false;var jit_verbals=false;var jit_fire_dep=null;var jit_fire_order=null;var jit_dep_network=null;var jit_fire_ndep=null;function firedep_to_fireorder(d){var a=false;jit_fire_order=[];jit_fire_ndep=[];for(var f in simhw_sim_signals()){if(typeof d[f]=="undefined"){jit_fire_order.push(f);continue}ndep=0;a=false;for(var e in d[f]){ndep++;if(d[f][e]==simhw_sim_signal(e).behavior.length){a=true}}jit_fire_ndep[f]=ndep;if(a==false){jit_fire_order.push(f)}}}function compile_behaviors(){var jit_bes="";jit_fire_dep={};var sig_obj=null;var expr_obj=null;for(var sig in simhw_sim_signals()){jit_bes+="simhw_sim_signal('"+sig+"').behavior_fn = new Array();\n";for(var val in simhw_sim_signal(sig).behavior){var input_behavior=simhw_sim_signal(sig).behavior[val];var jit_be="";var s_exprs=input_behavior.split(";");for(var i=0;i>>1;set_value(ep_states[d[1]],a);ep_internal_states.alu_flags.flag_n=(a<0)?1:0;ep_internal_states.alu_flags.flag_z=(a==0)?1:0;ep_internal_states.alu_flags.flag_v=0;ep_internal_states.alu_flags.flag_c=0},verbal:function(e){var a=(get_value(ep_states[e[2]]))>>>1;var d=get_cfg("verbal_verbose");if(d!=="math"){return"ALU Shift Right Logical with result "+show_value(a)+". "}return"ALU output = "+show_value(a)+" (SRL). "}};ep_behaviors.SRA={nparameters:3,types:["E","E"],operation:function(d){var a=(get_value(ep_states[d[2]]))>>1;set_value(ep_states[d[1]],a);ep_internal_states.alu_flags.flag_n=(a<0)?1:0;ep_internal_states.alu_flags.flag_z=(a==0)?1:0;ep_internal_states.alu_flags.flag_v=0;ep_internal_states.alu_flags.flag_c=0},verbal:function(e){var a=(get_value(ep_states[e[2]]))>>1;var d=get_cfg("verbal_verbose");if(d!=="math"){return"ALU Shift Right Arithmetic with result "+show_value(a)+". "}return"ALU output = "+show_value(a)+" (SRA). "}};ep_behaviors.SL={nparameters:3,types:["E","E"],operation:function(d){var a=(get_value(ep_states[d[2]]))<<1;set_value(ep_states[d[1]],a);ep_internal_states.alu_flags.flag_n=(a<0)?1:0;ep_internal_states.alu_flags.flag_z=(a==0)?1:0;ep_internal_states.alu_flags.flag_v=0;ep_internal_states.alu_flags.flag_c=((a)>>>31)},verbal:function(e){var a=(get_value(ep_states[e[2]]))<<1;var d=get_cfg("verbal_verbose");if(d!=="math"){return"ALU Shift Left with result "+show_value(a)+". "}return"ALU output = "+show_value(a)+" (SL). "}};ep_behaviors.RR={nparameters:3,types:["E","E"],operation:function(d){var a=((get_value(ep_states[d[2]]))>>>1)|(((get_value(ep_states[d[2]]))&1)<<31);set_value(ep_states[d[1]],a);ep_internal_states.alu_flags.flag_n=(a<0)?1:0;ep_internal_states.alu_flags.flag_z=(a==0)?1:0;ep_internal_states.alu_flags.flag_v=0;ep_internal_states.alu_flags.flag_c=0},verbal:function(e){var a=((get_value(ep_states[e[2]]))>>>1)|(((get_value(ep_states[e[2]]))&1)<<31);var d=get_cfg("verbal_verbose");if(d!=="math"){return"ALU Right Rotation with result "+show_value(a)+". "}return"ALU output = "+show_value(a)+" (RR). "}};ep_behaviors.RL={nparameters:3,types:["E","E"],operation:function(d){var a=((get_value(ep_states[d[2]]))<<1)|(((get_value(ep_states[d[2]]))&2147483648)>>>31);set_value(ep_states[d[1]],a);ep_internal_states.alu_flags.flag_n=(a<0)?1:0;ep_internal_states.alu_flags.flag_z=(a==0)?1:0;ep_internal_states.alu_flags.flag_v=0;ep_internal_states.alu_flags.flag_c=0},verbal:function(e){var a=((get_value(ep_states[e[2]]))<<1)|(((get_value(ep_states[e[2]]))&2147483648)>>>31);var d=get_cfg("verbal_verbose");if(d!=="math"){return"ALU Left Rotation with result "+show_value(a)+". "}return"ALU output = "+show_value(a)+" (LR). "}};ep_behaviors.ADD={nparameters:4,types:["E","E","E"],operation:function(g){var f=get_value(ep_states[g[2]])<<0;var e=get_value(ep_states[g[3]])<<0;var d=f+e;set_value(ep_states[g[1]],d>>>0);ep_internal_states.alu_flags.flag_n=(d<0)?1:0;ep_internal_states.alu_flags.flag_z=(d==0)?1:0;ep_internal_states.alu_flags.flag_c=(f>>>31)&&(e>>>31);ep_internal_states.alu_flags.flag_v=0;if((d<0)&&(f>=0)&&(e>=0)){ep_internal_states.alu_flags.flag_v=1}if((d>=0)&&(f<0)&&(e<0)){ep_internal_states.alu_flags.flag_v=1}},verbal:function(h){var g=get_value(ep_states[h[2]])<<0;var e=get_value(ep_states[h[3]])<<0;var d=g+e;var f=get_cfg("verbal_verbose");if(f!=="math"){return"ALU ADD with result "+show_value(d)+". "}return"ALU output = "+show_value(d)+" (ADD). "}};ep_behaviors.SUB={nparameters:4,types:["E","E","E"],operation:function(g){var f=get_value(ep_states[g[2]])<<0;var e=get_value(ep_states[g[3]])<<0;var d=f-e;set_value(ep_states[g[1]],d>>>0);ep_internal_states.alu_flags.flag_n=(d<0)?1:0;ep_internal_states.alu_flags.flag_z=(d==0)?1:0;ep_internal_states.alu_flags.flag_c=(f>>>31)&&(e>>>31);ep_internal_states.alu_flags.flag_v=0;if((d<0)&&(f>=0)&&(e>=0)){ep_internal_states.alu_flags.flag_v=1}if((d>=0)&&(f<0)&&(e<0)){ep_internal_states.alu_flags.flag_v=1}},verbal:function(h){var g=get_value(ep_states[h[2]])<<0;var e=get_value(ep_states[h[3]])<<0;var d=g-e;var f=get_cfg("verbal_verbose");if(f!=="math"){return"ALU SUB with result "+show_value(d)+". "}return"ALU output = "+show_value(d)+" (SUB). "}};ep_behaviors.MUL={nparameters:4,types:["E","E","E"],operation:function(g){var f=get_value(ep_states[g[2]])<<0;var e=get_value(ep_states[g[3]])<<0;var d=f*e;set_value(ep_states[g[1]],d>>>0);ep_internal_states.alu_flags.flag_n=(d<0)?1:0;ep_internal_states.alu_flags.flag_z=(d==0)?1:0;ep_internal_states.alu_flags.flag_c=0;ep_internal_states.alu_flags.flag_v=0;if((d<0)&&(f>=0)&&(e>=0)){ep_internal_states.alu_flags.flag_v=1}if((d>=0)&&(f<0)&&(e<0)){ep_internal_states.alu_flags.flag_v=1}},verbal:function(h){var g=get_value(ep_states[h[2]])<<0;var e=get_value(ep_states[h[3]])<<0;var d=g*e;var f=get_cfg("verbal_verbose");if(f!=="math"){return"ALU MUL with result "+show_value(d)+". "}return"ALU output = "+show_value(d)+" (MUL). "}};ep_behaviors.DIV={nparameters:4,types:["E","E","E"],operation:function(g){var f=(get_value(ep_states[g[2]])<<0);var e=(get_value(ep_states[g[3]])<<0);if(0==e){set_value(ep_states[g[1]],0);ep_internal_states.alu_flags.flag_n=0;ep_internal_states.alu_flags.flag_z=1;ep_internal_states.alu_flags.flag_v=1;ep_internal_states.alu_flags.flag_c=0;return}var d=Math.floor(f/e);set_value(ep_states[g[1]],d);ep_internal_states.alu_flags.flag_n=(d<0)?1:0;ep_internal_states.alu_flags.flag_z=(d==0)?1:0;ep_internal_states.alu_flags.flag_v=0;ep_internal_states.alu_flags.flag_c=0},verbal:function(h){var g=get_value(ep_states[h[2]])<<0;var e=get_value(ep_states[h[3]])<<0;if(0==e){return"ALU DIV zero by zero (oops!). "}var d=Math.floor(g/e);var f=get_cfg("verbal_verbose");if(f!=="math"){return"ALU DIV with result "+show_value(d)+". "}return"ALU output = "+show_value(d)+" (DIV). "}};ep_behaviors.MOD={nparameters:4,types:["E","E","E"],operation:function(d){var a=(get_value(ep_states[d[2]])<<0)%(get_value(ep_states[d[3]])<<0);set_value(ep_states[d[1]],a);ep_internal_states.alu_flags.flag_n=(a<0)?1:0;ep_internal_states.alu_flags.flag_z=(a==0)?1:0;ep_internal_states.alu_flags.flag_v=0;ep_internal_states.alu_flags.flag_c=0},verbal:function(h){var g=get_value(ep_states[h[2]])<<0;var e=get_value(ep_states[h[3]])<<0;if(0==e){return"ALU MOD zero by zero (oops!). "}var d=g%e;var f=get_cfg("verbal_verbose");if(f!=="math"){return"ALU MOD with result "+show_value(d)+". "}return"ALU output = "+show_value(d)+" (MOD). "}};ep_behaviors.LUI={nparameters:3,types:["E","E"],operation:function(d){var a=(get_value(ep_states[d[2]]))<<16;set_value(ep_states[d[1]],a);ep_internal_states.alu_flags.flag_n=(a<0)?1:0;ep_internal_states.alu_flags.flag_z=(a==0)?1:0;ep_internal_states.alu_flags.flag_v=0;ep_internal_states.alu_flags.flag_c=0},verbal:function(e){var a=(get_value(ep_states[e[2]]))<<16;var d=get_cfg("verbal_verbose");if(d!=="math"){return"ALU Load Upper Immediate with result "+show_value(a)+". "}return"ALU output = "+show_value(a)+" (LUI). "}};ep_behaviors.PLUS1={nparameters:3,types:["E","E"],operation:function(f){var e=get_value(ep_states[f[2]])<<0;var d=e+1;set_value(ep_states[f[1]],d>>>0)},verbal:function(g){var f=get_value(ep_states[g[2]])<<0;var d=f+1;var e=get_cfg("verbal_verbose");if(e!=="math"){return"Copy to "+show_verbal(g[1])+" "+show_verbal(g[2])+" plus one with result "+show_value(d)+". "}return show_verbal(g[1])+" = "+show_verbal(g[2])+" + 1 ("+show_value(d)+"). "}};ep_behaviors.PLUS4={nparameters:3,types:["E","E"],operation:function(f){var e=get_value(ep_states[f[2]])<<0;var d=e+4;set_value(ep_states[f[1]],d>>>0)},verbal:function(g){var f=get_value(ep_states[g[2]])<<0;var d=f+4;var e=get_cfg("verbal_verbose");if(e!=="math"){return"Copy to "+show_verbal(g[1])+" "+show_verbal(g[2])+" plus four with result "+show_value(d)+". "}return show_verbal(g[1])+" = "+show_verbal(g[2])+" + 4 ("+show_value(d)+"). "}};ep_behaviors.MBIT={nparameters:5,types:["X","X","I","I"],operation:function(a){var h=get_reference(a[1]);var g=get_reference(a[2]);var k=parseInt(a[3]);var e=parseInt(a[4]);var f=get_value(g).toString(2);var d="00000000000000000000000000000000".substring(0,32-f.length)+f;d=d.substr(31-(k+e-1),e);set_value(h,parseInt(d,2))},verbal:function(k){var f=get_reference(k[1]);var m=get_reference(k[2]);var d=parseInt(k[3]);var n=parseInt(k[4]);var h=get_value(m).toString(2);var g="00000000000000000000000000000000".substring(0,32-h.length)+h;g=g.substr(31-(d+n-1),n);var e=parseInt(g,2);var a=get_cfg("verbal_verbose");if(a!=="math"){return"Copy from "+show_verbal(k[2])+" to "+show_verbal(k[1])+" value "+show_value(e)+" (copied "+n+" bits from bit "+d+"). "}return show_verbal(k[1])+" = "+show_verbal(k[2])+" ("+show_value(e)+", "+n+" bits from bit "+d+"). "}};ep_behaviors.MBIT_SN={nparameters:5,types:["S","E","E","I"],operation:function(d){var h=0;var g=d[3].split("/");if(1==g.length){h=get_value(ep_states[d[3]])}else{if(typeof ep_states[g[0]].value[g[1]]!="undefined"){h=ep_states[g[0]].value[g[1]]}else{if(typeof ep_signals[g[1]].default_value!="undefined"){h=ep_signals[g[1]].default_value}else{if(typeof ep_states[g[1]].default_value!="undefined"){h=ep_states[g[1]].default_value}else{alert("WARN: undefined state/field pair -> "+g[0]+"/"+g[1])}}}}var k=parseInt(d[4]);var f=get_value(ep_states[d[2]]).toString(2);var e="00000000000000000000000000000000".substring(0,32-f.length)+f;var a=e.substr(31-(h+k-1),k);set_value(ep_signals[d[1]],parseInt(a,2))},verbal:function(a){return""}};ep_behaviors.SBIT={nparameters:4,types:["X","X","I"],operation:function(a){sim_elto_org=get_reference(a[2]);sim_elto_dst=get_reference(a[1]);var d=(sim_elto_dst.value&~(1<>>0))},verbal:function(d){sim_elto_org=get_reference(d[2]);sim_elto_dst=get_reference(d[1]);var a=get_cfg("verbal_verbose");if(a!=="math"){return"Set bit "+show_verbal(d[3])+" of "+show_verbal(d[1])+" to value "+sim_elto_org.value+". "}return show_verbal(d[1])+"."+show_verbal(d[3])+" = "+sim_elto_org.value+". "}};ep_behaviors.MBITS={nparameters:8,types:["E","I","E","S","S","I","S"],operation:function(d){var h=parseInt(ep_signals[d[4]].value);var f=parseInt(ep_signals[d[5]].value);var g=get_value(ep_states[d[3]]).toString(2);var e=("00000000000000000000000000000000".substring(0,32-g.length)+g);e=e.substr(31-(h+f-1),f);var a="00000000000000000000000000000000".substring(0,32-e.length)+e;if(("1"==ep_signals[d[7]].value)&&("1"==e.substr(0,1))){a="11111111111111111111111111111111".substring(0,32-e.length)+e}set_value(ep_states[d[1]],parseInt(a,2))},verbal:function(e){var k=parseInt(ep_signals[e[4]].value);var g=parseInt(ep_signals[e[5]].value);var h=get_value(ep_states[e[3]]).toString(2);var f=("00000000000000000000000000000000".substring(0,32-h.length)+h);f=f.substr(31-(k+g-1),g);var d="00000000000000000000000000000000".substring(0,32-f.length)+f;if(("1"==ep_signals[e[7]].value)&&("1"==f.substr(0,1))){d="11111111111111111111111111111111".substring(0,32-f.length)+f}h=parseInt(d,2);var a=get_cfg("verbal_verbose");if(a!=="math"){return" Copy from "+show_verbal(e[3])+" to "+show_verbal(e[1])+" value "+show_value(h)+" (copied "+g+" bits from bit "+k+"). "}return show_verbal(e[1])+" = "+show_verbal(e[3])+" ("+show_value(h)+", "+g+" bits from bit "+k+"). "}};ep_behaviors.BSEL={nparameters:6,types:["E","I","I","E","I"],operation:function(f){var m=parseInt(f[2]);var k=parseInt(f[5]);var a=parseInt(f[3]);var h=get_value(ep_states[f[4]]).toString(2);var g="00000000000000000000000000000000".substring(0,32-h.length)+h;g=g.substr(31-(k+a)+1,a);var e="00000000000000000000000000000000".substring(0,32-g.length)+g;var d="00000000000000000000000000000000".substr(0,m);e=e+d;set_value(ep_states[f[1]],parseInt(e,2))},verbal:function(o){var h=parseInt(o[2]);var m=parseInt(o[3]);var a=parseInt(o[5]);var n=get_value(ep_states[o[4]]).toString(2);var k="00000000000000000000000000000000".substring(0,32-n.length)+n;k=k.substr(31-(a+m)+1,m);var g="00000000000000000000000000000000".substring(0,32-k.length)+k;var f="00000000000000000000000000000000".substr(0,h);g=g+f;var e=parseInt(g,2);var d=get_cfg("verbal_verbose");if(d!=="math"){return"Copy from "+show_verbal(o[4])+" to "+show_verbal(o[1])+" value "+show_value(e)+" (copied "+m+" bits, from bit "+a+" of "+o[4]+" to bit "+h+" of "+o[1]+"). "}return show_verbal(o[1])+" = "+show_verbal(o[4])+" ("+show_value(e)+", "+m+" bits, from bit "+a+" of "+o[4]+" to bit "+h+" of "+o[1]+"). "}};ep_behaviors.EXT_SIG={nparameters:3,types:["E","I"],operation:function(e){var g=get_value(ep_states[e[1]]).toString(2);var f=("00000000000000000000000000000000".substring(0,32-g.length)+g);var d=f.substr(31-e[2],31);var a=d;if("1"==f[31-e[2]]){a="11111111111111111111111111111111".substring(0,32-d.length)+a}set_value(ep_states[e[1]],parseInt(a,2))},verbal:function(f){var h=get_value(ep_states[f[1]]).toString(2);var g=("00000000000000000000000000000000".substring(0,32-h.length)+h);var e=g.substr(31-f[2],31);var d=e;if("1"==g[31-f[2]]){d="11111111111111111111111111111111".substring(0,32-e.length)+d}var a=parseInt(d,2);return"Sign Extension with value "+show_value(a)+". "}};ep_behaviors.MOVE_BITS={nparameters:5,types:["S","I","I","S"],operation:function(k){var e=parseInt(k[2]);var a=0;var g=parseInt(k[3]);var h=ep_signals[k[4]].value.toString(2);h=("00000000000000000000000000000000".substring(0,32-h.length)+h);h=h.substr(31-a-g+1,g);var f=ep_signals[k[1]].value.toString(2);f=("00000000000000000000000000000000".substring(0,32-f.length)+f);var n=f.substr(0,32-(e+g));var m=f.substr(31-e+1,e);var d=n+h+m;set_value(ep_signals[k[1]],parseInt(d,2))},verbal:function(a){return""}};ep_behaviors.MOVE_BITSE={nparameters:6,types:["S","I","I","E","I"],operation:function(k){var e=parseInt(k[2]);var a=parseInt(k[5]);var g=parseInt(k[3]);var h=get_value(ep_states[k[4]]).toString(2);h=("00000000000000000000000000000000".substring(0,32-h.length)+h);h=h.substr(31-a-g+1,g);var f=ep_signals[k[1]].value.toString(2);f=("00000000000000000000000000000000".substring(0,32-f.length)+f);var n=f.substr(0,32-(e+g));var m=f.substr(31-e+1,e);var d=n+h+m;set_value(ep_signals[k[1]],parseInt(d,2))},verbal:function(a){return""}};ep_behaviors.DECO={nparameters:1,operation:function(d){ep_states.INEX.value=0;var g=decode_instruction(ep_internal_states.FIRMWARE,ep_ctrl_states.ir,get_value(ep_states.REG_IR));if(null==g.oinstruction){alert("ERROR: undefined instruction code in firmware (co:"+g.op_code.toString(2)+", cop:"+g.cop_code.toString(2)+")");ep_states.ROM_MUXA.value=0;ep_states.INEX.value=1;return -1}var f=g.op_code<<6;if(typeof g.oinstruction.cop!="undefined"){f=f+g.cop_code}if(typeof ep_internal_states.ROM[f]=="undefined"){alert("ERROR: undefined rom address "+f+" in firmware");ep_states.ROM_MUXA.value=0;return -1}ep_states.ROM_MUXA.value=ep_internal_states.ROM[f];var h=get_value(ep_states.DECO_INS);set_value(ep_states.DECO_INS,h+1);var a=get_value(ep_states.REG_PC)-4;var e=get_deco_from_pc(a);set_value(ep_states.REG_IR_DECO,e);show_dbg_ir(get_value(ep_states.REG_IR_DECO))},verbal:function(a){return"Decode instruction. "}};ep_behaviors.FIRE={nparameters:2,types:["S"],operation:function(a){if(ep_internal_states.fire_stack.indexOf(a[1])!=-1){return}ep_internal_states.fire_stack.push(a[1]);update_draw(ep_signals[a[1]],ep_signals[a[1]].value);if("L"==ep_signals[a[1]].type){update_state(a[1])}ep_internal_states.fire_stack.pop(a[1]);check_buses(a[1])},verbal:function(a){return""}};ep_behaviors.FIRE_IFSET={nparameters:3,types:["S","I"],operation:function(a){if(get_value(ep_signals[a[1]])!=parseInt(a[2])){return}ep_behaviors.FIRE.operation(a)},verbal:function(a){return""}};ep_behaviors.FIRE_IFCHANGED={nparameters:3,types:["S","X"],operation:function(a){sim_elto=get_reference(a[2]);if(sim_elto.changed==false){return}ep_behaviors.FIRE.operation(a)},verbal:function(a){return""}};ep_behaviors.RESET_CHANGED={nparameters:2,types:["X"],operation:function(a){sim_elto=get_reference(a[1]);sim_elto.changed=false},verbal:function(a){return""}};ep_behaviors.CLOCK={nparameters:1,operation:function(s_expr){var val=get_value(ep_states.CLK);set_value(ep_states.CLK,val+1);for(var i=0;i0)){h=ep_events.mem[g-1]-1}ep_events.mem[g]=h;if(h>0){return}var f=0;a=a&4294967292;if(typeof ep_internal_states.MP[a]!="undefined"){f=ep_internal_states.MP[a]}if(0==(k&12)){if(0==(k&3)){e=(e&4294967040)|(f&255)}if(1==(k&3)){e=(e&4294902015)|(f&65280)}if(2==(k&3)){e=(e&4278255615)|(f&16711680)}if(3==(k&3)){e=(e&16777215)|(f&4278190080)}}else{if(1==(k&12)){if(0==(k&2)){e=(e&4294901760)|(f&65535)}if(1==(k&2)){e=(e&65535)|(f&4294901760)}}else{e=f}}ep_states[d[2]].value=(e>>>0);ep_signals[d[4]].value=1;show_main_memory(ep_internal_states.MP,a,false,false)},verbal:function(m){var g="";var n=ep_states[m[1]].value;var a=ep_states[m[2]].value;var h=ep_signals[m[3]].value;var e=get_value(ep_states[m[5]].value);var d="word";if(0==(h&12)){d="byte"}else{if(1==(h&12)){d="half"}}var k=0;if(typeof ep_internal_states.MP[n]!="undefined"){k=ep_internal_states.MP[n]}var f=get_cfg("verbal_verbose");if(f!=="math"){g="Try to read a "+d+" from memory at address 0x"+n.toString(16)+" with value 0x"+k.toString(16)+". "}g="Memory output = 0x"+k.toString(16)+" (Read a "+d+" from 0x"+n.toString(16)+"). ";return g}};ep_behaviors.MEM_WRITE={nparameters:6,types:["E","E","S","S","E"],operation:function(d){var a=ep_states[d[1]].value;var e=ep_states[d[2]].value;var k=ep_signals[d[3]].value;var g=get_value(ep_states[d[5]].value);ep_signals[d[4]].value=0;var h=get_var(ep_internal_states.MP_wc);if((typeof ep_events.mem[g-1]!="undefined")&&(ep_events.mem[g-1]>0)){h=ep_events.mem[g-1]-1}ep_events.mem[g]=h;if(h>0){return}var f=0;a=a&4294967292;if(typeof ep_internal_states.MP[a]!="undefined"){f=ep_internal_states.MP[a]}if(0==(k&12)){if(0==(k&3)){f=(f&4294967040)|(e&255)}if(1==(k&3)){f=(f&4294902015)|(e&65280)}if(2==(k&3)){f=(f&4278255615)|(e&16711680)}if(3==(k&3)){f=(f&16777215)|(e&4278190080)}}else{if(1==(k&12)){if(0==(k&2)){f=(f&4294901760)|(e&65535)}if(1==(k&2)){f=(f&65535)|(e&4294901760)}}else{f=e}}ep_internal_states.MP[a]=(f>>>0);ep_signals[d[4]].value=1;show_main_memory(ep_internal_states.MP,a,true,true)},verbal:function(m){var g="";var n=ep_states[m[1]].value;var a=ep_states[m[2]].value;var h=ep_signals[m[3]].value;var e=get_value(ep_states[m[5]].value);var d="word";if(0==(h&12)){d="byte"}else{if(1==(h&12)){d="half"}}var k=0;if(typeof ep_internal_states.MP[n]!="undefined"){k=ep_internal_states.MP[n]}var f=get_cfg("verbal_verbose");if(f!=="math"){g="Try to write a "+d+" to memory at address 0x"+n.toString(16)+" with value "+k.toString(16)+". "}g="Memory[0x"+n.toString(16)+"] = 0x"+k.toString(16)+" (Write a "+d+" to 0x"+n.toString(16)+"). ";return g}};ep_behaviors.MEM_RESET={nparameters:1,operation:function(a){ep_events.mem={}},verbal:function(a){return"Reset main memory (all values will be zeroes). "}};ep_components.IO={name:"IO",version:"1",abilities:["IO_TIMER"],details_name:["IO_STATS","IO_CONFIG"],details_fire:[["svg_p:text3775"],[]],write_state:function(a){return a},read_state:function(d,a){return false},get_state:function(a){return null}};ep_internal_states.io_int_factory=[];ep_internal_states.io_int_factory[0]={period:0,probability:0.5,accumulated:0,active:false};ep_internal_states.io_int_factory[1]={period:0,probability:0.5,accumulated:0,active:false};ep_internal_states.io_int_factory[2]={period:0,probability:0.5,accumulated:0,active:false};ep_internal_states.io_int_factory[3]={period:0,probability:0.5,accumulated:0,active:false};ep_internal_states.io_int_factory[4]={period:0,probability:0.5,accumulated:0,active:false};ep_internal_states.io_int_factory[5]={period:0,probability:0.5,accumulated:0,active:false};ep_internal_states.io_int_factory[6]={period:0,probability:0.5,accumulated:0,active:false};ep_internal_states.io_int_factory[7]={period:0,probability:0.5,accumulated:0,active:false};var IOSR_ID=4352;var IOCR_ID=4356;var IODR_ID=4360;ep_internal_states.io_hash[IOSR_ID]="IOSR";ep_internal_states.io_hash[IOCR_ID]="IOCR";ep_internal_states.io_hash[IODR_ID]="IODR";ep_states.IOSR={name:"IOSR",verbal:"IO State Register",visible:false,nbits:"32",value:0,default_value:0,draw_data:[]};ep_states.IOCR={name:"IOCR",verbal:"IO Control Register",visible:false,nbits:"32",value:0,default_value:0,draw_data:[]};ep_states.IODR={name:"IODR",verbal:"IO Data Register",visible:false,nbits:"32",value:0,default_value:0,draw_data:[]};ep_signals.INT={name:"INT",visible:true,type:"L",value:0,default_value:0,nbits:"1",depends_on:["CLK"],behavior:["FIRE C","FIRE C"],fire_name:["svg_p:tspan4199"],draw_data:[[],["svg_p:path3809"]],draw_name:[[],[]]};ep_signals.IORDY={name:"IORDY",visible:true,type:"L",value:0,default_value:0,nbits:"1",depends_on:["CLK"],behavior:["FIRE_IFCHANGED IORDY C","FIRE_IFCHANGED IORDY C"],fire_name:["svg_p:tspan4089","svg_p:path3793","svg_p:text3911"],draw_data:[[],["svg_p:path3897"]],draw_name:[[],[]]};ep_signals.IO_IOR={name:"IO_IOR",visible:true,type:"L",value:0,default_value:0,nbits:"1",behavior:["NOP","IO_IOR BUS_AB BUS_DB IOSR IOCR IODR CLK; FIRE SBWA"],fire_name:["svg_p:tspan4173"],draw_data:[[],["svg_p:path3795","svg_p:path3733"]],draw_name:[[],[]]};ep_signals.IO_IOW={name:"IO_IOW",visible:true,type:"L",value:0,default_value:0,nbits:"1",behavior:["NOP","IO_IOW BUS_AB BUS_DB IOSR IOCR IODR CLK; FIRE SBWA"],fire_name:["svg_p:text3785-0-6-0-5-5"],draw_data:[[],["svg_p:path3805","svg_p:path3733"]],draw_name:[[],[]]};ep_signals.IO_IE={name:"IO_IE",visible:true,type:"L",value:1,default_value:1,nbits:"1",behavior:["NOP","IO_CHK_I CLK INT INTV; FIRE C"],fire_name:[],draw_data:[[],[]],draw_name:[[],[]]};ep_signals.INTA={name:"INTA",visible:true,type:"L",value:1,default_value:0,nbits:"1",behavior:["NOP","INTA CLK INT INTA BUS_DB INTV; FIRE BW; FIRE C"],fire_name:["svg_p:text3785-0-6-0-5-5-1-1"],draw_data:[[],["svg_p:path3807","svg_p:path3737"]],draw_name:[[],[]]};ep_behaviors.IO_IOR={nparameters:7,types:["E","E","E","E","E","E"],operation:function(a){var g=get_value(ep_states[a[1]]);var d=get_value(ep_states[a[3]]);var e=get_value(ep_states[a[4]]);var f=get_value(ep_states[a[5]]);if(g==IOSR_ID){set_value(ep_states[a[2]],d)}if(g==IOCR_ID){set_value(ep_states[a[2]],e)}if(g==IODR_ID){set_value(ep_states[a[2]],f)}},verbal:function(a){var f="";var h=get_value(ep_states[a[1]]);var d=get_value(ep_states[a[3]]);var e=get_value(ep_states[a[4]]);var g=get_value(ep_states[a[5]]);if(h==IOSR_ID){f="I/O device read at IOSR of value "+d+". "}if(h==IOCR_ID){f="I/O device read at IOCR of value "+e+". "}if(h==IODR_ID){f="I/O device read at IODR of value "+g+". "}return f}};ep_behaviors.IO_IOW={nparameters:7,types:["E","E","E","E","E","E"],operation:function(d){var g=get_value(ep_states[d[1]]);var e=get_value(ep_states[d[2]]);if((g!=IOSR_ID)&&(g!=IOCR_ID)&&(g!=IODR_ID)){return}if(g==IOSR_ID){set_value(ep_states[d[3]],e)}if(g==IOCR_ID){set_value(ep_states[d[4]],e)}if(g==IODR_ID){set_value(ep_states[d[5]],e)}var a=get_value(ep_states[d[4]]);var f=get_value(ep_states[d[5]]);if((a<0)||(a>7)){return}set_var(ep_internal_states.io_int_factory[a].period,f);set_var(ep_internal_states.io_int_factory[a].probability,1);if(0==f){set_var(ep_internal_states.io_int_factory[a].probability,0)}},verbal:function(a){var e="";var f=get_value(ep_states[a[1]]);var d=get_value(ep_states[a[2]]);if(f==IOSR_ID){e="I/O device write at IOSR with value "+d+". "}if(f==IOCR_ID){e="I/O device write at IOCR with value "+d+". "}if(f==IODR_ID){e="I/O device write at IODR with value "+d+". "}return e}};ep_behaviors.IO_CHK_I={nparameters:4,types:["E","S","E"],operation:function(a){var e=get_value(ep_states[a[1]]);for(var d=ep_internal_states.io_int_factory.length-1;d>=0;d--){if(get_var(ep_internal_states.io_int_factory[d].period)==0){continue}if(get_var(ep_internal_states.io_int_factory[d].active)==true){set_value(ep_signals[a[2]],1);set_value(ep_states[a[3]],d)}if((e%get_var(ep_internal_states.io_int_factory[d].period))==0){if(Math.random()>get_var(ep_internal_states.io_int_factory[d].probability)){continue}set_var(ep_internal_states.io_int_factory[d].accumulated,get_var(ep_internal_states.io_int_factory[d].accumulated)+1);set_var(ep_internal_states.io_int_factory[d].active,true);if(typeof ep_events.io[e]=="undefined"){ep_events.io[e]=[]}ep_events.io[e].push(d);set_value(ep_signals[a[2]],1);set_value(ep_states[a[3]],d)}}},verbal:function(a){return"Check I/O Interruption. "}};ep_behaviors.INTA={nparameters:6,types:["E","S","S","E","E"],operation:function(a){var e=get_value(ep_states[a[1]]);if(typeof ep_events.io[e]!="undefined"){set_value(ep_states[a[4]],ep_events.io[e][0]);return}set_value(ep_signals[a[2]],0);set_value(ep_states[a[5]],0);for(var d=0;d>>1;set_value(poc_states[d[1]],a);poc_internal_states.alu_flags.flag_n=(a<0)?1:0;poc_internal_states.alu_flags.flag_z=(a==0)?1:0;poc_internal_states.alu_flags.flag_v=0;poc_internal_states.alu_flags.flag_c=0},verbal:function(e){var a=(get_value(poc_states[e[2]]))>>>1;var d=get_cfg("verbal_verbose");if(d!=="math"){return"ALU Shift Right Logical with result "+show_value(a)+". "}return"ALU output = "+show_value(a)+" (SRL). "}};poc_behaviors.SRA={nparameters:3,types:["E","E"],operation:function(d){var a=(get_value(poc_states[d[2]]))>>1;set_value(poc_states[d[1]],a);poc_internal_states.alu_flags.flag_n=(a<0)?1:0;poc_internal_states.alu_flags.flag_z=(a==0)?1:0;poc_internal_states.alu_flags.flag_v=0;poc_internal_states.alu_flags.flag_c=0},verbal:function(e){var a=(get_value(poc_states[e[2]]))>>1;var d=get_cfg("verbal_verbose");if(d!=="math"){return"ALU Shift Right Arithmetic with result "+show_value(a)+". "}return"ALU output = "+show_value(a)+" (SRA). "}};poc_behaviors.SL={nparameters:3,types:["E","E"],operation:function(d){var a=(get_value(poc_states[d[2]]))<<1;set_value(poc_states[d[1]],a);poc_internal_states.alu_flags.flag_n=(a<0)?1:0;poc_internal_states.alu_flags.flag_z=(a==0)?1:0;poc_internal_states.alu_flags.flag_v=0;poc_internal_states.alu_flags.flag_c=0},verbal:function(e){var a=(get_value(poc_states[e[2]]))<<1;var d=get_cfg("verbal_verbose");if(d!=="math"){return"ALU Shift Left with result "+show_value(a)+". "}return"ALU output = "+show_value(a)+" (SL). "}};poc_behaviors.RR={nparameters:3,types:["E","E"],operation:function(d){var a=((get_value(poc_states[d[2]]))>>>1)|(((get_value(poc_states[d[2]]))&1)<<31);set_value(poc_states[d[1]],a);poc_internal_states.alu_flags.flag_n=(a<0)?1:0;poc_internal_states.alu_flags.flag_z=(a==0)?1:0;poc_internal_states.alu_flags.flag_v=0;poc_internal_states.alu_flags.flag_c=0},verbal:function(e){var a=((get_value(poc_states[e[2]]))>>>1)|(((get_value(poc_states[e[2]]))&1)<<31);var d=get_cfg("verbal_verbose");if(d!=="math"){return"ALU Right Rotation with result "+show_value(a)+". "}return"ALU output = "+show_value(a)+" (RR). "}};poc_behaviors.RL={nparameters:3,types:["E","E"],operation:function(d){var a=((get_value(poc_states[d[2]]))<<1)|(((get_value(poc_states[d[2]]))&2147483648)>>>31);set_value(poc_states[d[1]],a);poc_internal_states.alu_flags.flag_n=(a<0)?1:0;poc_internal_states.alu_flags.flag_z=(a==0)?1:0;poc_internal_states.alu_flags.flag_v=0;poc_internal_states.alu_flags.flag_c=0},verbal:function(e){var a=((get_value(poc_states[e[2]]))<<1)|(((get_value(poc_states[e[2]]))&2147483648)>>>31);var d=get_cfg("verbal_verbose");if(d!=="math"){return"ALU Left Rotation with result "+show_value(a)+". "}return"ALU output = "+show_value(a)+" (LR). "}};poc_behaviors.ADD={nparameters:4,types:["E","E","E"],operation:function(g){var f=get_value(poc_states[g[2]])<<0;var e=get_value(poc_states[g[3]])<<0;var d=f+e;set_value(poc_states[g[1]],d>>>0);poc_internal_states.alu_flags.flag_n=(d<0)?1:0;poc_internal_states.alu_flags.flag_z=(d==0)?1:0;poc_internal_states.alu_flags.flag_c=(f>>>31)&&(e>>>31);poc_internal_states.alu_flags.flag_v=0;if((d<0)&&(f>=0)&&(e>=0)){poc_internal_states.alu_flags.flag_v=1}if((d>=0)&&(f<0)&&(e<0)){poc_internal_states.alu_flags.flag_v=1}},verbal:function(h){var g=get_value(poc_states[h[2]])<<0;var e=get_value(poc_states[h[3]])<<0;var d=g+e;var f=get_cfg("verbal_verbose");if(f!=="math"){return"ALU ADD with result "+show_value(d)+". "}return"ALU output = "+show_value(d)+" (ADD). "}};poc_behaviors.SUB={nparameters:4,types:["E","E","E"],operation:function(g){var f=get_value(poc_states[g[2]])<<0;var e=get_value(poc_states[g[3]])<<0;var d=f-e;set_value(poc_states[g[1]],d>>>0);poc_internal_states.alu_flags.flag_n=(d<0)?1:0;poc_internal_states.alu_flags.flag_z=(d==0)?1:0;poc_internal_states.alu_flags.flag_c=(f>>>31)&&(e>>>31);poc_internal_states.alu_flags.flag_v=0;if((d<0)&&(f>=0)&&(e>=0)){poc_internal_states.alu_flags.flag_v=1}if((d>=0)&&(f<0)&&(e<0)){poc_internal_states.alu_flags.flag_v=1}},verbal:function(h){var g=get_value(poc_states[h[2]])<<0;var e=get_value(poc_states[h[3]])<<0;var d=g-e;var f=get_cfg("verbal_verbose");if(f!=="math"){return"ALU SUB with result "+show_value(d)+". "}return"ALU output = "+show_value(d)+" (SUB). "}};poc_behaviors.MUL={nparameters:4,types:["E","E","E"],operation:function(g){var f=get_value(poc_states[g[2]])<<0;var e=get_value(poc_states[g[3]])<<0;var d=f*e;set_value(poc_states[g[1]],d>>>0);poc_internal_states.alu_flags.flag_n=(d<0)?1:0;poc_internal_states.alu_flags.flag_z=(d==0)?1:0;poc_internal_states.alu_flags.flag_c=0;poc_internal_states.alu_flags.flag_v=0;if((d<0)&&(f>=0)&&(e>=0)){poc_internal_states.alu_flags.flag_v=1}if((d>=0)&&(f<0)&&(e<0)){poc_internal_states.alu_flags.flag_v=1}},verbal:function(h){var g=get_value(poc_states[h[2]])<<0;var e=get_value(poc_states[h[3]])<<0;var d=g*e;var f=get_cfg("verbal_verbose");if(f!=="math"){return"ALU MUL with result "+show_value(d)+". "}return"ALU output = "+show_value(d)+" (MUL). "}};poc_behaviors.DIV={nparameters:4,types:["E","E","E"],operation:function(g){var f=(get_value(poc_states[g[2]])<<0);var e=(get_value(poc_states[g[3]])<<0);if(0==e){set_value(poc_states[g[1]],0);poc_internal_states.alu_flags.flag_n=0;poc_internal_states.alu_flags.flag_z=1;poc_internal_states.alu_flags.flag_v=1;poc_internal_states.alu_flags.flag_c=0;return}var d=Math.floor(f/e);set_value(poc_states[g[1]],d);poc_internal_states.alu_flags.flag_n=(d<0)?1:0;poc_internal_states.alu_flags.flag_z=(d==0)?1:0;poc_internal_states.alu_flags.flag_v=0;poc_internal_states.alu_flags.flag_c=0},verbal:function(h){var g=get_value(poc_states[h[2]])<<0;var e=get_value(poc_states[h[3]])<<0;if(0==e){return"ALU DIV zero by zero (oops!). "}var d=Math.floor(g/e);var f=get_cfg("verbal_verbose");if(f!=="math"){return"ALU DIV with result "+show_value(d)+". "}return"ALU output = "+show_value(d)+" (DIV). "}};poc_behaviors.MOD={nparameters:4,types:["E","E","E"],operation:function(d){var a=(get_value(poc_states[d[2]])<<0)%(get_value(poc_states[d[3]])<<0);set_value(poc_states[d[1]],a);poc_internal_states.alu_flags.flag_n=(a<0)?1:0;poc_internal_states.alu_flags.flag_z=(a==0)?1:0;poc_internal_states.alu_flags.flag_v=0;poc_internal_states.alu_flags.flag_c=0},verbal:function(h){var g=get_value(poc_states[h[2]])<<0;var e=get_value(poc_states[h[3]])<<0;if(0==e){return"ALU MOD zero by zero (oops!). "}var d=g%e;var f=get_cfg("verbal_verbose");if(f!=="math"){return"ALU MOD with result "+show_value(d)+". "}return"ALU output = "+show_value(d)+" (MOD). "}};poc_behaviors.LUI={nparameters:3,types:["E","E"],operation:function(d){var a=(get_value(poc_states[d[2]]))<<16;set_value(poc_states[d[1]],a);poc_internal_states.alu_flags.flag_n=(a<0)?1:0;poc_internal_states.alu_flags.flag_z=(a==0)?1:0;poc_internal_states.alu_flags.flag_v=0;poc_internal_states.alu_flags.flag_c=0},verbal:function(e){var a=(get_value(poc_states[e[2]]))<<16;var d=get_cfg("verbal_verbose");if(d!=="math"){return"ALU Load Upper Immediate with result "+show_value(a)+". "}return"ALU output = "+show_value(a)+" (LUI). "}};poc_behaviors.ADDFOUR={nparameters:3,types:["E","E"],operation:function(f){var e=get_value(poc_states[f[2]])<<0;var d=e+4;set_value(poc_states[f[1]],d>>>0);poc_internal_states.alu_flags.flag_n=(d<0)?1:0;poc_internal_states.alu_flags.flag_z=(d==0)?1:0;poc_internal_states.alu_flags.flag_c=(e>>>31)&&(b>>>31);poc_internal_states.alu_flags.flag_v=0;if((d<0)&&(e>=0)&&(b>=0)){poc_internal_states.alu_flags.flag_v=1}if((d>=0)&&(e<0)&&(b<0)){poc_internal_states.alu_flags.flag_v=1}},verbal:function(f){var e=get_value(poc_states[f[2]])<<0;var d=e+4;return"ALU ADD 4 with result "+show_value(d)+". "}};poc_behaviors.ADDONE={nparameters:3,types:["E","E"],operation:function(f){var e=get_value(poc_states[f[2]])<<0;var d=e+1;set_value(poc_states[f[1]],d>>>0);poc_internal_states.alu_flags.flag_n=(d<0)?1:0;poc_internal_states.alu_flags.flag_z=(d==0)?1:0;poc_internal_states.alu_flags.flag_c=(e>>>31)&&(b>>>31);poc_internal_states.alu_flags.flag_v=0;if((d<0)&&(e>=0)&&(b>=0)){poc_internal_states.alu_flags.flag_v=1}if((d>=0)&&(e<0)&&(b<0)){poc_internal_states.alu_flags.flag_v=1}},verbal:function(f){var e=get_value(poc_states[f[2]])<<0;var d=e+1;return"ALU ADD 1 with result "+show_value(d)+". "}};poc_behaviors.SUBFOUR={nparameters:3,types:["E","E"],operation:function(f){var e=get_value(poc_states[f[2]])<<0;var d=e-4;set_value(poc_states[f[1]],d>>>0);poc_internal_states.alu_flags.flag_n=(d<0)?1:0;poc_internal_states.alu_flags.flag_z=(d==0)?1:0;poc_internal_states.alu_flags.flag_c=(e>>>31)&&(b>>>31);poc_internal_states.alu_flags.flag_v=0;if((d<0)&&(e>=0)&&(b>=0)){poc_internal_states.alu_flags.flag_v=1}if((d>=0)&&(e<0)&&(b<0)){poc_internal_states.alu_flags.flag_v=1}},verbal:function(f){var e=get_value(poc_states[f[2]])<<0;var d=e-4;return"ALU SUB 4 with result "+show_value(d)+". "}};poc_behaviors.SUBONE={nparameters:3,types:["E","E"],operation:function(f){var e=get_value(poc_states[f[2]])<<0;var d=e-1;set_value(poc_states[f[1]],d>>>0);poc_internal_states.alu_flags.flag_n=(d<0)?1:0;poc_internal_states.alu_flags.flag_z=(d==0)?1:0;poc_internal_states.alu_flags.flag_c=(e>>>31)&&(b>>>31);poc_internal_states.alu_flags.flag_v=0;if((d<0)&&(e>=0)&&(b>=0)){poc_internal_states.alu_flags.flag_v=1}if((d>=0)&&(e<0)&&(b<0)){poc_internal_states.alu_flags.flag_v=1}},verbal:function(f){var e=get_value(poc_states[f[2]])<<0;var d=e-1;return"ALU SUB 1 with result "+show_value(d)+". "}};poc_behaviors.FADD={nparameters:4,types:["E","E","E"],operation:function(g){var f=get_value(poc_states[g[2]])<<0;var e=get_value(poc_states[g[3]])<<0;var d=f.toFixed(2)+e.toFixed(2);set_value(poc_states[g[1]],d>>>0);poc_internal_states.alu_flags.flag_n=(d<0)?1:0;poc_internal_states.alu_flags.flag_z=(d==0)?1:0;poc_internal_states.alu_flags.flag_c=0;poc_internal_states.alu_flags.flag_v=0;if((d<0)&&(f>=0)&&(e>=0)){poc_internal_states.alu_flags.flag_v=1}if((d>=0)&&(f<0)&&(e<0)){poc_internal_states.alu_flags.flag_v=1}},verbal:function(g){var f=get_value(poc_states[g[2]])<<0;var e=get_value(poc_states[g[3]])<<0;var d=f.toFixed(2)+e.toFixed(2);return"ALU Float ADD with result "+d+". "}};poc_behaviors.FSUB={nparameters:4,types:["E","E","E"],operation:function(g){var f=get_value(poc_states[g[2]])<<0;var e=get_value(poc_states[g[3]])<<0;var d=f.toFixed(2)-e.toFixed(2);set_value(poc_states[g[1]],d>>>0);poc_internal_states.alu_flags.flag_n=(d<0)?1:0;poc_internal_states.alu_flags.flag_z=(d==0)?1:0;poc_internal_states.alu_flags.flag_c=0;poc_internal_states.alu_flags.flag_v=0;if((d<0)&&(f>=0)&&(e>=0)){poc_internal_states.alu_flags.flag_v=1}if((d>=0)&&(f<0)&&(e<0)){poc_internal_states.alu_flags.flag_v=1}},verbal:function(g){var f=get_value(poc_states[g[2]])<<0;var e=get_value(poc_states[g[3]])<<0;var d=f.toFixed(2)-e.toFixed(2);return"ALU Float SUB with result "+d+". "}};poc_behaviors.FMUL={nparameters:4,types:["E","E","E"],operation:function(g){var f=get_value(poc_states[g[2]])<<0;var e=get_value(poc_states[g[3]])<<0;var d=f.toFixed(2)*e.toFixed(2);set_value(poc_states[g[1]],d>>>0);poc_internal_states.alu_flags.flag_n=(d<0)?1:0;poc_internal_states.alu_flags.flag_z=(d==0)?1:0;poc_internal_states.alu_flags.flag_c=0;poc_internal_states.alu_flags.flag_v=0;if((d<0)&&(f>=0)&&(e>=0)){poc_internal_states.alu_flags.flag_v=1}if((d>=0)&&(f<0)&&(e<0)){poc_internal_states.alu_flags.flag_v=1}},verbal:function(g){var f=get_value(poc_states[g[2]])<<0;var e=get_value(poc_states[g[3]])<<0;var d=f.toFixed(2)*e.toFixed(2);return"ALU Float MUL with result "+d+". "}};poc_behaviors.FDIV={nparameters:4,types:["E","E","E"],operation:function(g){var f=(get_value(poc_states[g[2]])<<0);var e=(get_value(poc_states[g[3]])<<0);if(0==e){set_value(poc_states[g[1]],0);poc_internal_states.alu_flags.flag_n=0;poc_internal_states.alu_flags.flag_z=1;poc_internal_states.alu_flags.flag_v=1;poc_internal_states.alu_flags.flag_c=0;return}var d=Math.floor(f/e);set_value(poc_states[g[1]],d);poc_internal_states.alu_flags.flag_n=(d<0)?1:0;poc_internal_states.alu_flags.flag_z=(d==0)?1:0;poc_internal_states.alu_flags.flag_v=0;poc_internal_states.alu_flags.flag_c=0},verbal:function(g){var f=get_value(poc_states[g[2]])<<0;var e=get_value(poc_states[g[3]])<<0;var d=f.toFixed(2)/e.toFixed(2);return"ALU Float DIV with result "+d+". "}};poc_behaviors.FMOD={nparameters:4,types:["E","E","E"],operation:function(d){var a=(get_value(poc_states[d[2]])<<0)%(get_value(poc_states[d[3]])<<0);set_value(poc_states[d[1]],a);poc_internal_states.alu_flags.flag_n=(a<0)?1:0;poc_internal_states.alu_flags.flag_z=(a==0)?1:0;poc_internal_states.alu_flags.flag_v=0;poc_internal_states.alu_flags.flag_c=0},verbal:function(g){var f=get_value(poc_states[g[2]])<<0;var e=get_value(poc_states[g[3]])<<0;var d=f.toFixed(2)%e.toFixed(2);return"ALU Float MOD with result "+d+". "}};poc_behaviors.LUI={nparameters:3,types:["E","E"],operation:function(d){var a=(get_value(poc_states[d[2]]))<<16;set_value(poc_states[d[1]],a);poc_internal_states.alu_flags.flag_n=(a<0)?1:0;poc_internal_states.alu_flags.flag_z=(a==0)?1:0;poc_internal_states.alu_flags.flag_v=0;poc_internal_states.alu_flags.flag_c=0},verbal:function(d){var a=(get_value(poc_states[d[2]]))<<16;return"ALU Load Upper Immediate with result "+show_value(a)+". "}};poc_behaviors.PLUS1={nparameters:3,types:["E","E"],operation:function(f){var e=get_value(poc_states[f[2]])<<0;var d=e+1;set_value(poc_states[f[1]],d>>>0)},verbal:function(g){var f=get_value(poc_states[g[2]])<<0;var d=f+1;var e=get_cfg("verbal_verbose");if(e!=="math"){return"Add one to "+show_verbal(g[2])+" and copy to "+show_verbal(g[1])+" with result "+show_value(d)+". "}return show_verbal(g[1])+" = "+show_verbal(g[2])+" + 1 ("+show_value(d)+"). "}};poc_behaviors.PLUS4={nparameters:3,types:["E","E"],operation:function(f){var e=get_value(poc_states[f[2]])<<0;var d=e+4;set_value(poc_states[f[1]],d>>>0)},verbal:function(g){var f=get_value(poc_states[g[2]])<<0;var d=f+4;var e=get_cfg("verbal_verbose");if(e!=="math"){return"Add four to "+show_verbal(g[2])+" and copy to "+show_verbal(g[1])+" with result "+show_value(d)+". "}return show_verbal(g[1])+" = "+show_verbal(g[2])+" + 4 ("+show_value(d)+"). "}};poc_behaviors.MBIT={nparameters:5,types:["X","X","I","I"],operation:function(a){var h=get_reference(a[1]);var g=get_reference(a[2]);var k=parseInt(a[3]);var e=parseInt(a[4]);var f=get_value(g).toString(2);var d="00000000000000000000000000000000".substring(0,32-f.length)+f;d=d.substr(31-(k+e-1),e);set_value(h,parseInt(d,2))},verbal:function(k){var f=get_reference(k[1]);var m=get_reference(k[2]);var d=parseInt(k[3]);var n=parseInt(k[4]);var h=get_value(m).toString(2);var g="00000000000000000000000000000000".substring(0,32-h.length)+h;g=g.substr(31-(d+n-1),n);var e=parseInt(g,2);var a=get_cfg("verbal_verbose");if(a!=="math"){return"Copy from "+show_verbal(k[2])+" to "+show_verbal(k[1])+" value "+show_value(e)+" (copied "+n+" bits from bit "+d+"). "}return show_verbal(k[1])+" = "+show_verbal(k[2])+" ("+show_value(e)+", "+n+" bits from bit "+d+"). "}};poc_behaviors.MBIT_SN={nparameters:5,types:["S","E","E","I"],operation:function(d){var h=0;var g=d[3].split("/");if(1==g.length){h=get_value(poc_states[d[3]])}else{if(typeof poc_states[g[0]].value[g[1]]!="undefined"){h=poc_states[g[0]].value[g[1]]}else{if(typeof poc_signals[g[1]].default_value!="undefined"){h=poc_signals[g[1]].default_value}else{if(typeof poc_states[g[1]].default_value!="undefined"){h=poc_states[g[1]].default_value}else{alert("WARN: undefined state/field pair -> "+g[0]+"/"+g[1])}}}}var k=parseInt(d[4]);var f=get_value(poc_states[d[2]]).toString(2);var e="00000000000000000000000000000000".substring(0,32-f.length)+f;var a=e.substr(31-(h+k-1),k);set_value(poc_signals[d[1]],parseInt(a,2))},verbal:function(a){return""}};poc_behaviors.SBIT={nparameters:4,types:["X","X","I"],operation:function(a){sim_elto_org=get_reference(a[2]);sim_elto_dst=get_reference(a[1]);var d=(sim_elto_dst.value&~(1<>>0))},verbal:function(d){sim_elto_org=get_reference(d[2]);sim_elto_dst=get_reference(d[1]);var a=get_cfg("verbal_verbose");if(a!=="math"){return"Set bit "+show_verbal(d[3])+" of "+show_verbal(d[1])+" to value "+sim_elto_org.value+". "}return show_verbal(d[1])+"."+show_verbal(d[3])+" = "+sim_elto_org.value+". "}};poc_behaviors.MBITS={nparameters:8,types:["E","I","E","S","S","I","S"],operation:function(d){var h=parseInt(poc_signals[d[4]].value);var f=parseInt(poc_signals[d[5]].value);var g=get_value(poc_states[d[3]]).toString(2);var e=("00000000000000000000000000000000".substring(0,32-g.length)+g);e=e.substr(31-(h+f-1),f);var a="00000000000000000000000000000000".substring(0,32-e.length)+e;if(("1"==poc_signals[d[7]].value)&&("1"==e.substr(0,1))){a="11111111111111111111111111111111".substring(0,32-e.length)+e}set_value(poc_states[d[1]],parseInt(a,2))},verbal:function(e){var k=parseInt(poc_signals[e[4]].value);var g=parseInt(poc_signals[e[5]].value);var h=get_value(poc_states[e[3]]).toString(2);var f=("00000000000000000000000000000000".substring(0,32-h.length)+h);f=f.substr(31-(k+g-1),g);var d="00000000000000000000000000000000".substring(0,32-f.length)+f;if(("1"==poc_signals[e[7]].value)&&("1"==f.substr(0,1))){d="11111111111111111111111111111111".substring(0,32-f.length)+f}h=parseInt(d,2);var a=get_cfg("verbal_verbose");if(a!=="math"){return" Copy from "+show_verbal(e[3])+" to "+show_verbal(e[1])+" value "+show_value(h)+" (copied "+g+" bits from bit "+k+"). "}return show_verbal(e[1])+" = "+show_verbal(e[3])+" ("+show_value(h)+", "+g+" bits from bit "+k+"). "}};poc_behaviors.BSEL={nparameters:6,types:["E","I","I","E","I"],operation:function(f){var m=parseInt(f[2]);var k=parseInt(f[5]);var a=parseInt(f[3]);var h=get_value(poc_states[f[4]]).toString(2);var g="00000000000000000000000000000000".substring(0,32-h.length)+h;g=g.substr(31-(k+a)+1,a);var e="00000000000000000000000000000000".substring(0,32-g.length)+g;var d="00000000000000000000000000000000".substr(0,m);e=e+d;set_value(poc_states[f[1]],parseInt(e,2))},verbal:function(o){var h=parseInt(o[2]);var m=parseInt(o[3]);var a=parseInt(o[5]);var n=get_value(poc_states[o[4]]).toString(2);var k="00000000000000000000000000000000".substring(0,32-n.length)+n;k=k.substr(31-(a+m)+1,m);var g="00000000000000000000000000000000".substring(0,32-k.length)+k;var f="00000000000000000000000000000000".substr(0,h);g=g+f;var e=parseInt(g,2);var d=get_cfg("verbal_verbose");if(d!=="math"){return"Copy from "+show_verbal(o[4])+" to "+show_verbal(o[1])+" value "+show_value(e)+" (copied "+m+" bits, from bit "+a+" of "+o[4]+" to bit "+h+" of "+o[1]+"). "}return show_verbal(o[1])+" = "+show_verbal(o[4])+" ("+show_value(e)+", "+m+" bits, from bit "+a+" of "+o[4]+" to bit "+h+" of "+o[1]+"). "}};poc_behaviors.EXT_SIG={nparameters:3,types:["E","I"],operation:function(e){var g=get_value(poc_states[e[1]]).toString(2);var f=("00000000000000000000000000000000".substring(0,32-g.length)+g);var d=f.substr(31-e[2],31);var a=d;if("1"==f[31-e[2]]){a="11111111111111111111111111111111".substring(0,32-d.length)+a}set_value(poc_states[e[1]],parseInt(a,2))},verbal:function(f){var h=get_value(poc_states[f[1]]).toString(2);var g=("00000000000000000000000000000000".substring(0,32-h.length)+h);var e=g.substr(31-f[2],31);var d=e;if("1"==g[31-f[2]]){d="11111111111111111111111111111111".substring(0,32-e.length)+d}var a=parseInt(d,2);return"Sign Extension with value "+show_value(a)+". "}};poc_behaviors.MOVE_BITS={nparameters:5,types:["S","I","I","S"],operation:function(k){var e=parseInt(k[2]);var a=0;var g=parseInt(k[3]);var h=poc_signals[k[4]].value.toString(2);h=("00000000000000000000000000000000".substring(0,32-h.length)+h);h=h.substr(31-a-g+1,g);var f=poc_signals[k[1]].value.toString(2);f=("00000000000000000000000000000000".substring(0,32-f.length)+f);var n=f.substr(0,32-(e+g));var m=f.substr(31-e+1,e);var d=n+h+m;set_value(poc_signals[k[1]],parseInt(d,2))},verbal:function(a){return""}};poc_behaviors.MOVE_BITSE={nparameters:6,types:["S","I","I","E","I"],operation:function(k){var e=parseInt(k[2]);var a=parseInt(k[5]);var g=parseInt(k[3]);var h=get_value(poc_states[k[4]]).toString(2);h=("00000000000000000000000000000000".substring(0,32-h.length)+h);h=h.substr(31-a-g+1,g);var f=poc_signals[k[1]].value.toString(2);f=("00000000000000000000000000000000".substring(0,32-f.length)+f);var n=f.substr(0,32-(e+g));var m=f.substr(31-e+1,e);var d=n+h+m;set_value(poc_signals[k[1]],parseInt(d,2))},verbal:function(a){return""}};poc_behaviors.DECO={nparameters:1,operation:function(d){poc_states.INEX.value=0;var g=decode_instruction(poc_internal_states.FIRMWARE,poc_ctrl_states.ir,get_value(poc_states.REG_IR));if(null==g.oinstruction){alert("ERROR: undefined instruction code in firmware (co:"+g.op_code.toString(2)+", cop:"+g.cop_code.toString(2)+")");poc_states.ROM_MUXA.value=0;poc_states.INEX.value=1;return -1}var f=g.op_code<<6;if(typeof g.oinstruction.cop!="undefined"){f=f+g.cop_code}if(typeof poc_internal_states.ROM[f]=="undefined"){alert("ERROR: undefined rom address "+f+" in firmware");poc_states.ROM_MUXA.value=0;return -1}poc_states.ROM_MUXA.value=poc_internal_states.ROM[f];var h=get_value(poc_states.DECO_INS);set_value(poc_states.DECO_INS,h+1);var a=get_value(poc_states.REG_PC)-4;var e=get_deco_from_pc(a);set_value(poc_states.REG_IR_DECO,e);show_dbg_ir(get_value(poc_states.REG_IR_DECO))},verbal:function(a){return"Decode instruction. "}};poc_behaviors.FIRE={nparameters:2,types:["S"],operation:function(a){if(poc_internal_states.fire_stack.indexOf(a[1])!=-1){return}poc_internal_states.fire_stack.push(a[1]);update_draw(poc_signals[a[1]],poc_signals[a[1]].value);if("L"==poc_signals[a[1]].type){update_state(a[1])}poc_internal_states.fire_stack.pop(a[1]);check_buses(a[1])},verbal:function(a){return""}};poc_behaviors.FIRE_IFSET={nparameters:3,types:["S","I"],operation:function(a){if(get_value(poc_signals[a[1]])!=parseInt(a[2])){return}poc_behaviors.FIRE.operation(a)},verbal:function(a){return""}};poc_behaviors.FIRE_IFCHANGED={nparameters:3,types:["S","X"],operation:function(a){sim_elto=get_reference(a[2]);if(sim_elto.changed==false){return}poc_behaviors.FIRE.operation(a)},verbal:function(a){return""}};poc_behaviors.RESET_CHANGED={nparameters:2,types:["X"],operation:function(a){sim_elto=get_reference(a[1]);sim_elto.changed=false},verbal:function(a){return""}};poc_behaviors.CLOCK={nparameters:1,operation:function(s_expr){var val=get_value(poc_states.CLK);set_value(poc_states.CLK,val+1);for(var i=0;i0)){k=poc_events.mem[h-1]-1}poc_events.mem[h]=k;if(k>0){return}var g=0;var e=a&4294967292;if(typeof poc_internal_states.MP[e]!="undefined"){g=poc_internal_states.MP[e]}switch(m){case 0:if(0==(a&3)){f=(g&255)}if(1==(a&3)){f=(g&65280)>>8}if(2==(a&3)){f=(g&16711680)>>16}if(3==(a&3)){f=(g&4278190080)>>24}break;case 1:if(0==(a&3)){f=(g&65535)}if(1==(a&3)){f=(g&65535)}if(2==(a&3)){f=(g&4294901760)>>16}if(3==(a&3)){f=(g&4294901760)>>16}break;case 2:if(0==(a&3)){f=(g&16777215)}if(1==(a&3)){f=(g&4294967040)}break;case 3:f=g;break}poc_states[d[2]].value=(f>>>0);poc_signals[d[4]].value=1;show_main_memory(poc_internal_states.MP,e,false,false)},verbal:function(d){var f="";var a=poc_states[d[1]].value;var e=poc_states[d[2]].value;var k=poc_signals[d[3]].value;var h=get_value(poc_states[d[5]].value);switch(k){case 0:bw_type="byte";break;case 1:bw_type="half";break;case 2:bw_type="three bytes";break;case 3:bw_type="word";break}var g=0;if(typeof poc_internal_states.MP[a]!="undefined"){g=poc_internal_states.MP[a]}f="Try to read a "+bw_type+" from memory at address 0x"+a.toString(16)+" with value "+g.toString(16)+". ";return f}};poc_behaviors.MEM_WRITE={nparameters:6,types:["E","E","S","S","E"],operation:function(d){var a=poc_states[d[1]].value;var f=poc_states[d[2]].value;var m=poc_signals[d[3]].value;var h=get_value(poc_states[d[5]].value);poc_signals[d[4]].value=0;var k=get_var(poc_internal_states.MP_wc);if((typeof poc_events.mem[h-1]!="undefined")&&(poc_events.mem[h-1]>0)){k=poc_events.mem[h-1]-1}poc_events.mem[h]=k;if(k>0){return}var g=0;var e=a&4294967292;if(typeof poc_internal_states.MP[e]!="undefined"){g=poc_internal_states.MP[e]}switch(m){case 0:if(0==(a&3)){g=(g&4294967040)|(f&255)}if(1==(a&3)){g=(g&4294902015)|((f&255)<<8)}if(2==(a&3)){g=(g&4278255615)|((f&255)<<16)}if(3==(a&3)){g=(g&16777215)|((f&255)<<24)}break;case 1:if(0==(a&3)){g=(g&4294901760)|(f&65535)}if(1==(a&3)){g=(g&4294901760)|(f&65535)}if(2==(a&3)){g=(g&65535)|((f&65535)<<16)}if(3==(a&3)){g=(g&65535)|((f&65535)<<16)}break;case 2:if(0==(a&3)){g=(g&4278190080)|(f&16777215)}if(1==(a&3)){g=(g&255)|(f&4294967040)}break;case 3:g=f;break}poc_internal_states.MP[e]=(g>>>0);poc_signals[d[4]].value=1;show_main_memory(poc_internal_states.MP,e,true,true)},verbal:function(d){var f="";var a=poc_states[d[1]].value;var e=poc_states[d[2]].value;var k=poc_signals[d[3]].value;var h=get_value(poc_states[d[5]].value);switch(k){case 0:bw_type="byte";break;case 1:bw_type="half";break;case 2:bw_type="three bytes";break;case 3:bw_type="word";break}var g=0;if(typeof poc_internal_states.MP[a]!="undefined"){g=poc_internal_states.MP[a]}f="Try to write a "+bw_type+" to memory at address 0x"+a.toString(16)+" with value "+g.toString(16)+". ";return f}};poc_behaviors.MEM_RESET={nparameters:1,operation:function(a){poc_events.mem={}},verbal:function(a){return"Reset the memory (all values will be zeroes). "}};poc_components.IO={name:"IO",version:"1",abilities:["IO_TIMER"],details_name:["IO_STATS","IO_CONFIG"],details_fire:[["svg_p:text3775"],[]],write_state:function(a){return a},read_state:function(d,a){return false},get_state:function(a){return null}};poc_internal_states.io_int_factory=[];poc_internal_states.io_int_factory[0]={period:0,probability:0.5,accumulated:0,active:false};poc_internal_states.io_int_factory[1]={period:0,probability:0.5,accumulated:0,active:false};poc_internal_states.io_int_factory[2]={period:0,probability:0.5,accumulated:0,active:false};poc_internal_states.io_int_factory[3]={period:0,probability:0.5,accumulated:0,active:false};poc_internal_states.io_int_factory[4]={period:0,probability:0.5,accumulated:0,active:false};poc_internal_states.io_int_factory[5]={period:0,probability:0.5,accumulated:0,active:false};poc_internal_states.io_int_factory[6]={period:0,probability:0.5,accumulated:0,active:false};poc_internal_states.io_int_factory[7]={period:0,probability:0.5,accumulated:0,active:false};var IOSR_ID=4352;var IOCR_ID=4356;var IODR_ID=4360;poc_internal_states.io_hash[IOSR_ID]="IOSR";poc_internal_states.io_hash[IOCR_ID]="IOCR";poc_internal_states.io_hash[IODR_ID]="IODR";poc_states.IOSR={name:"IOSR",verbal:"IO State Register",visible:false,nbits:"32",value:0,default_value:0,draw_data:[]};poc_states.IOCR={name:"IOCR",verbal:"IO Control Register",visible:false,nbits:"32",value:0,default_value:0,draw_data:[]};poc_states.IODR={name:"IODR",verbal:"IO Data Register",visible:false,nbits:"32",value:0,default_value:0,draw_data:[]};poc_signals.INT={name:"INT",visible:true,type:"L",value:0,default_value:0,nbits:"1",depends_on:["CLK"],behavior:["FIRE C","FIRE C"],fire_name:["svg_p:tspan4199"],draw_data:[[],["svg_p:path3809"]],draw_name:[[],[]]};poc_signals.IORDY={name:"IORDY",visible:true,type:"L",value:0,default_value:0,nbits:"1",depends_on:["CLK"],behavior:["FIRE_IFCHANGED IORDY C","FIRE_IFCHANGED IORDY C"],fire_name:["svg_p:tspan4089","svg_p:path3793","svg_p:tspan4089"],draw_data:[[],["svg_p:path3897"]],draw_name:[[],[]]};poc_signals.IO_IOR={name:"IO_IOR",visible:true,type:"L",value:0,default_value:0,nbits:"1",behavior:["NOP","IO_IOR BUS_AB BUS_DB IOSR IOCR IODR CLK; FIRE M1"],fire_name:["svg_p:tspan4173"],draw_data:[[],["svg_p:path3795","svg_p:path3733"]],draw_name:[[],[]]};poc_signals.IO_IOW={name:"IO_IOW",visible:true,type:"L",value:0,default_value:0,nbits:"1",behavior:["NOP","IO_IOW BUS_AB BUS_DB IOSR IOCR IODR CLK; FIRE M1"],fire_name:["svg_p:text3785-0-6-0-5-5"],draw_data:[[],["svg_p:path3805","svg_p:path3733"]],draw_name:[[],[]]};poc_signals.IO_IE={name:"IO_IE",visible:true,type:"L",value:1,default_value:1,nbits:"1",behavior:["NOP","IO_CHK_I CLK INT INTV; FIRE C"],fire_name:[],draw_data:[[],[]],draw_name:[[],[]]};poc_signals.INTA={name:"INTA",visible:true,type:"L",value:1,default_value:0,nbits:"1",behavior:["NOP","INTA CLK INT INTA BUS_DB INTV; FIRE M1; FIRE C"],fire_name:["svg_p:text3785-0-6-0-5-5-1-1"],draw_data:[[],["svg_p:path3807","svg_p:path3737"]],draw_name:[[],[]]};poc_behaviors.IO_IOR={nparameters:7,types:["E","E","E","E","E","E"],operation:function(a){var g=get_value(poc_states[a[1]]);var d=get_value(poc_states[a[3]]);var e=get_value(poc_states[a[4]]);var f=get_value(poc_states[a[5]]);if(g==IOSR_ID){set_value(poc_states[a[2]],d)}if(g==IOCR_ID){set_value(poc_states[a[2]],e)}if(g==IODR_ID){set_value(poc_states[a[2]],f)}},verbal:function(a){var f="";var h=get_value(poc_states[a[1]]);var d=get_value(poc_states[a[3]]);var e=get_value(poc_states[a[4]]);var g=get_value(poc_states[a[5]]);if(h==IOSR_ID){f="I/O device read at IOSR of value "+d+". "}if(h==IOCR_ID){f="I/O device read at IOCR of value "+e+". "}if(h==IODR_ID){f="I/O device read at IODR of value "+g+". "}return f}};poc_behaviors.IO_IOW={nparameters:7,types:["E","E","E","E","E","E"],operation:function(d){var g=get_value(poc_states[d[1]]);var e=get_value(poc_states[d[2]]);if((g!=IOSR_ID)&&(g!=IOCR_ID)&&(g!=IODR_ID)){return}if(g==IOSR_ID){set_value(poc_states[d[3]],e)}if(g==IOCR_ID){set_value(poc_states[d[4]],e)}if(g==IODR_ID){set_value(poc_states[d[5]],e)}var a=get_value(poc_states[d[4]]);var f=get_value(poc_states[d[5]]);if((a<0)||(a>7)){return}set_var(poc_internal_states.io_int_factory[a].period,f);set_var(poc_internal_states.io_int_factory[a].probability,1);if(0==f){set_var(poc_internal_states.io_int_factory[a].probability,0)}},verbal:function(a){var e="";var f=get_value(poc_states[a[1]]);var d=get_value(poc_states[a[2]]);if(f==IOSR_ID){e="I/O device write at IOSR with value "+d+". "}if(f==IOCR_ID){e="I/O device write at IOCR with value "+d+". "}if(f==IODR_ID){e="I/O device write at IODR with value "+d+". "}return e}};poc_behaviors.IO_CHK_I={nparameters:4,types:["E","S","E"],operation:function(a){var e=get_value(poc_states[a[1]]);for(var d=poc_internal_states.io_int_factory.length-1;d>=0;d--){if(get_var(poc_internal_states.io_int_factory[d].period)==0){continue}if(get_var(poc_internal_states.io_int_factory[d].active)==true){set_value(poc_signals[a[2]],1);set_value(poc_states[a[3]],d)}if((e%get_var(poc_internal_states.io_int_factory[d].period))==0){if(Math.random()>get_var(poc_internal_states.io_int_factory[d].probability)){continue}set_var(poc_internal_states.io_int_factory[d].accumulated,get_var(poc_internal_states.io_int_factory[d].accumulated)+1);set_var(poc_internal_states.io_int_factory[d].active,true);if(typeof poc_events.io[e]=="undefined"){poc_events.io[e]=[]}poc_events.io[e].push(d);set_value(poc_signals[a[2]],1);set_value(poc_states[a[3]],d)}}},verbal:function(a){return"Check I/O Interruption. "}};poc_behaviors.INTA={nparameters:6,types:["E","S","S","E","E"],operation:function(a){var e=get_value(poc_states[a[1]]);if(typeof poc_events.io[e]!="undefined"){set_value(poc_states[a[4]],poc_events.io[e][0]);return}set_value(poc_signals[a[2]],0);set_value(poc_states[a[5]],0);for(var d=0;d0){a=g.newlines[g.newlines.length-1]+1}var e=0;if(g.newlines.length>1){e=g.newlines[g.newlines.length-2]+1}var d=e;var k=Math.min(g.t-1,a+32);for(;(typeof g.text[k+1]!="undefined")&&(g.text[k+1]!="\n");k++){}var m=k+2;k++;for(;(typeof g.text[k+1]!="undefined")&&(g.text[k+1]!="\n");k++){}k++;g.error="
...\n";for(var f=d;f(*) Problem around line "+g.line+":
"+h+".
";if(typeof ga!=="undefined"){ga("send","event","compile","compile.error","compile.error."+h)}return g}function getLabelContext(a){return{t:a.t,line:a.line,newlines:a.newlines.slice()}}function setLabelContext(d,a){d.t=a.t;d.line=a.line;d.newlines=a.newlines}function getComments(a){return a.comments.join("\n")}function resetComments(a){a.comments=[]}function nextNative(d){var g=d.t;var e=d.t;var f=1;while((d.t:' not found but '"+o+"'.")}for(var e in a.etiquetas){if(a.etiquetas[e]==o){return langError(a,"Label is repeated: "+getToken(a))}}a.etiquetas[a.contadorMC]=o;if(o.match("[a-zA-Z_0-9]*")[0]!=o){return langError(a,"Label format is not valid for '"+getToken(a)+"'")}nextToken(a)}if(!isToken(a,"(")){return langError(a,"Expected '(' not found")}nextToken(a);while(!isToken(a,")")){var h=getToken(a).toUpperCase();if(h=="MADDR"){nextToken(a);if(!isToken(a,"=")){return langError(a,"Expected '=' not found")}nextToken(a);var p={};p.nombre=getToken(a);p.cycle=f.length;p.index=a.i;p.instruction=a.instrucciones.length;var g=0;for(var m in a.etiquetas){if(isToken(a,a.etiquetas[m])){n[h]=m.toString();g=1}}if(g==0){a.labelsNotFound.push(p)}nextToken(a);if(isToken(a,",")){nextToken(a)}continue}if(typeof simhw_sim_signal(h)=="undefined"){return langError(a,"Signal does not exists: '"+h+"'")}if(typeof simhw_sim_signal(h).forbidden!="undefined"){return langError(a,"Signal '"+h+"' cannot be used directly, please use the Control Unit signals instead.")}n[h]=1;nextToken(a);if(isToken(a,"=")){nextToken(a);n[h]=parseInt(getToken(a),2);if(getToken(a).match("[01]*")[0]!=getToken(a)){return langError(a,"Incorrect binary format: "+getToken(a))}if(n[h]>=Math.pow(2,simhw_sim_signal(h).nbits)){return langError(a,"Value out of range: "+getToken(a))}nextToken(a)}if(isToken(a,",")){nextToken(a)}}var d=getComments(a);q.push(d);resetComments(a);f.push(n);a.contadorMC++;nextToken(a);if(isToken(a,",")){nextToken(a)}}if(f.length==0){return langError(a,"Empty microcode")}nextToken(a);return{microprograma:f,microcomments:q}}function read_native(d){var f=[];var a=[];if(!isToken(d,"{")){return langError(d,"Expected '{' not found")}nextNative(d);var e={};e.NATIVE=getToken(d);f.push(e);a.push("");nextToken(d);return{microprograma:f,microcomments:a}}function loadFirmware(text){var xr_info=simhw_sim_ctrlStates_get();var all_ones_co="1".repeat(xr_info.ir.default_eltos.co.length);var context={};context.line=1;context.error=null;context.i=0;context.contadorMC=0;context.etiquetas={};context.labelsNotFound=[];context.instrucciones=[];context.co_cop={};context.registers=[];context.text=text;context.tokens=[];context.token_types=[];context.t=0;context.newlines=[];context.pseudoInstructions=[];context.stackRegister=null;context.comments=[];nextToken(context);while(context.t100){return langError(context,"more than 100 fields in a single instruction.")}if(auxValue=="co"){return langError(context,"instruction field has 'co' as name.")}if(auxValue=="nwords"){return langError(context,"instruction field has 'nwords' as name.")}}if(isToken(context,"(")){firma=firma+",(";if(plus_found){firmaUsuario=firmaUsuario+"+("}else{firmaUsuario=firmaUsuario+" ("}nextToken(context);if(!isToken(context,",")&&!isToken(context,"(")&&!isToken(context,")")){var campoAux={};campoAux.name=getToken(context);campos.push(campoAux);numeroCampos++;firma=firma+getToken(context);firmaUsuario=firmaUsuario+getToken(context);nextToken(context)}else{return langError(context,"'token' is missing after '(' on: "+context.co_cop[instruccionAux.co].signature)}if(isToken(context,")")){firma=firma+")";firmaUsuario=firmaUsuario+")";nextToken(context)}else{return langError(context,"')' is missing on: "+context.co_cop[instruccionAux.co].signature)}}firma=firma+",";firmaUsuario=firmaUsuario+" "}firma=firma.substr(0,firma.length-1);firma=firma.replace(/,,/g,",");firmaUsuario=firmaUsuario.substr(0,firmaUsuario.length-1);firmaUsuario=firmaUsuario.replace(/ /g," ");instruccionAux.signature=firma;instruccionAux.signatureGlobal=firma;instruccionAux.signatureUser=firmaUsuario;instruccionAux.signatureRaw=firmaUsuario;nextToken(context);if(!isToken(context,"co")){return langError(context,"Expected keyword 'co' not found")}nextToken(context);if(!isToken(context,"=")){return langError(context,"Expected '=' not found")}nextToken(context);instruccionAux.co=getToken(context);if((getToken(context).match("[01]*")[0]!=getToken(context))||(getToken(context).length!=xr_info.ir.default_eltos.co.length)){return langError(context,"Incorrect binary format on 'co': "+getToken(context))}if(instruccionAux.co!=all_ones_co){if((typeof context.co_cop[instruccionAux.co]!="undefined")&&(context.co_cop[instruccionAux.co].cop==null)){return langError(context,"'co' is already been used by: "+context.co_cop[instruccionAux.co].signature)}if(typeof context.co_cop[instruccionAux.co]=="undefined"){context.co_cop[instruccionAux.co]={};context.co_cop[instruccionAux.co].signature=instruccionAux.signature;context.co_cop[instruccionAux.co].cop=null}}nextToken(context);if(isToken(context,",")){nextToken(context)}if(isToken(context,"cop")){nextToken(context);if(!isToken(context,"=")){return langError(context,"Expected '=' not found")}nextToken(context);instruccionAux.cop=getToken(context);if((getToken(context).match("[01]*")[0]!=getToken(context))||(getToken(context).length!=xr_info.ir.default_eltos.cop.length)){return langError(context,"Incorrect binary format on 'cop': "+getToken(context))}if((context.co_cop[instruccionAux.co].cop!=null)&&(typeof context.co_cop[instruccionAux.co].cop[instruccionAux.cop]!="undefined")){return langError(context,"'co+cop' is already been used by: "+context.co_cop[instruccionAux.co].cop[instruccionAux.cop])}if(context.co_cop[instruccionAux.co].cop==null){context.co_cop[instruccionAux.co].cop={}}context.co_cop[instruccionAux.co].cop[instruccionAux.cop]=instruccionAux.signature;nextToken(context);if(isToken(context,",")){nextToken(context)}}if(!isToken(context,"nwords")){return langError(context,"Expected keyword 'nwords' not found")}nextToken(context);if(!isToken(context,"=")){return langError(context,"Expected '=' not found")}nextToken(context);instruccionAux.nwords=getToken(context);nextToken(context);if(isToken(context,",")){nextToken(context)}var camposInsertados=0;var overlapping={};while(camposInsertados32*parseInt(instruccionAux.nwords)-1){return langError(context,"startbit out of range: "+getToken(context))}nextToken(context);if(!isToken(context,",")){return langError(context,"Expected ',' not found")}nextToken(context);campos[camposInsertados]["stopbit"]=getToken(context);var stop=parseInt(campos[camposInsertados]["stopbit"]);if(stop>32*parseInt(instruccionAux.nwords)){return langError(context,"stopbit out of range: "+getToken(context))}for(var i=stop;i<=start;i++){if(typeof overlapping[i]!="undefined"){return langError(context,"overlapping field: "+campos[camposInsertados]["name"])}overlapping[i]=1}nextToken(context);if(!isToken(context,")")){return langError(context,"Expected ')' not found")}nextToken(context);if(campos[camposInsertados]["type"]=="address"){if(getToken(context)!="abs"&&getToken(context)!="rel"){return langError(context,"Type of addressing incorrect (abs or rel)")}campos[camposInsertados]["address_type"]=getToken(context);nextToken(context)}if(isToken(context,",")){nextToken(context)}camposInsertados++}instruccionAux.fields=campos;instruccionAux["native"]=false;if(isToken(context,"native")){instruccionAux["native"]=true;nextToken(context);if(isToken(context,",")){nextToken(context)}}if(true==instruccionAux["native"]){var ret=read_native(context)}else{var ret=read_microprg(context)}if(typeof ret.error!="undefined"){return ret}instruccionAux.microcode=ret.microprograma;instruccionAux.microcomments=ret.microcomments;context.instrucciones.push(instruccionAux);context.contadorMC=context.contadorMC+9;if(!isToken(context,"}")){return langError(context,"Expected '}' not found")}nextToken(context)}if(context.stackRegister==null){return langError(context,"Stack pointer register was not defined")}var found=false;for(var i=0;i=last_co){return langError(context,"There is not enough 'co' codes available for instructions")}context.instrucciones[i].co=label;context.co_cop[label]={};context.co_cop[label].signature=context.instrucciones[i].signature;context.co_cop[label].cop=null;first_co=j}}var labelsFounded=0;if(context.labelsNotFound.length>0){for(var i=0;i0){for(var e=0;e0)){g+="registers\n{\n";for(var f=0;f1&&d[0]=="0"){return false}if(!isNaN(parseFloat(d))&&isFinite(d)){var a=parseInt(d);if(typeof d=="string"&&d.includes(".")){alert("Truncating conversion has occurred: "+d+" became "+a)}return a}return false}function isOctal(e){if(e.substring(0,1)=="0"){var d=e.substring(1).replace(/\b0+/g,"");var a=parseInt(d,8);return(a.toString(8)===d)?a:false}return false}function isHex(e){if(e.substring(0,2).toLowerCase()=="0x"){var d=e.substring(2).toLowerCase().replace(/\b0+/g,"");if(d==""){d="0"}var a=parseInt(d,16);return(a.toString(16)===d)?a:false}return false}function isChar(e){var d=treatControlSequences(e);if(true==d.error){return false}var a=d.string;if(a[0]=="'"&&a[2]=="'"){return a.charCodeAt(1)}return false}function decimal2binary(e,d){var a=e.toString(2);if(a.length>WORD_LENGTH){return[a,d-a.length]}a=(e>>>0).toString(2);if(e>=0){return[a,d-a.length]}a="1"+a.replace(/^[1]+/g,"");if(a.length>d){return[a,d-a.length]}a="1".repeat(d-a.length)+a;return[a,d-a.length]}function isValidTag(a){if(!(isDecimal(a[0])===false)){return false}var d=/[^a-z,_\d]/i;return !(d.test(a))}function sum_array(d){return d.reduce(function(f,e){return f+e},0)}function get_candidate(h,a){var f=false;var g={};var k={};for(d=0;dg[d]){e=g[d];f=d}}}}}return f?parseInt(f):f}function reset_assembly(a){return"0".repeat(WORD_LENGTH*a)}function assembly_replacement(h,e,f,d,a){var g=h.substring(0,h.length-f+a);h=g+e+h.substring(h.length-d);return h}function assembly_co_cop(f,d,e){var a=simhw_sim_ctrlStates_get();if(d!==false){f=assembly_replacement(f,d,WORD_LENGTH,WORD_LENGTH-6,0)}if(e!==false){f=assembly_replacement(f,e,a.ir.default_eltos.cop.length,0,0)}return f}function writememory_and_reset(d,e,a){if(e.byteWord>=WORD_BYTES){d["0x"+e.seg_ptr.toString(16)]=e.machineCode;e.seg_ptr=e.seg_ptr+WORD_BYTES;e.byteWord=0;e.machineCode=reset_assembly(a)}}function is_end_of_file(a){return""===getToken(a)&&a.t>=a.text.length}function treatControlSequences(a){var d={};d.string="";d.error=false;for(var e=0;e=0){return langError(d,"Expected the align parameter as positive number but found '"+g+"'. Remember that number is the power of two for alignment, see MIPS documentation..")}writememory_and_reset(n.mp,h,1);var k=Math.pow(2,parseInt(g));switch(k){case 1:break;case 2:if(h.byteWord&1==1){h.byteWord++}break;default:while(true){writememory_and_reset(n.mp,h,1);if(h.seg_ptr%k==0&&h.byteWord==0){break}h.byteWord++}}nextToken(d)}else{if(".ascii"==e||".asciiz"==e){nextToken(d);var g=getToken(d);var p=treatControlSequences(g);if(true==p.error){return langError(d,p.string)}g=p.string;while(!is_directive(getToken(d))&&!is_end_of_file(d)){writememory_and_reset(n.mp,h,1);if(""==g){return langError(d,"String is not closed (forgot to end it with quotation marks)")}if("STRING"!=getTokenType(d)){return langError(d,"Expected string between quotation marks but found '"+g+"' instead")}for(i=0;i0){n.mp["0x"+h.seg_ptr.toString(16)]=h.machineCode;h.seg_ptr=h.seg_ptr+WORD_BYTES}n.seg[m].end=h.seg_ptr}function read_text(U,d,F){var I=getToken(U);var h=F.seg[I].begin;var E=U.firmware;var z=U.pseudoInstructions;var w=false;var f=-1;var S={};for(i=0;i=P[j].length){if("TAG"!=getTokenType(U)&&!E[K]){m[j]=0}continue}var k=E[y][j].fields[i];var g=k.startbit-k.stopbit+1;var x=false;var q=false;switch(k.type){case"address":case"inm":if(w&&"sel"==K){f++;var B=n[O][f++];var t=n[O][f++];var K=v[n[O][f++]];f++;q=true}if((J=isOctal(K))!==false){}else{if((J=isHex(K))!==false){}else{if((J=isDecimal(K))!==false){}else{if((J=isChar(K))!==false){}else{if((K[0]=="'")){var C="Unexpected inmediate value, found: '"+K+"' instead";m[j]=0;break}if(!isValidTag(K)){var C="A tag must follow an alphanumeric format (starting with a letter or underscore) but found '"+K+"' instead";m[j]=0;break}if(E[K]){var C="A tag can not have the same name as an instruction ("+K+")";m[j]=0;break}x=true}}}}if(q){G=decimal2binary(J,WORD_LENGTH);if(G[1]<0){return langError(U,"'"+K+"' is bigger than "+WORD_LENGTH+" bits")}J="0".repeat(G[1])+G[0];J=J.substring(WORD_LENGTH-B-1,WORD_LENGTH-t);J=parseInt(J,2);L[i+1]="0x"+J.toString(16)}if(!x){var G=decimal2binary(J,g);if(k.type=="address"&&"rel"==k.address_type){G=decimal2binary(J-h-WORD_BYTES,g)}}break;case"reg":var o=false;if("("==K){if("(reg)"!=P[j][i]){var C="Expected register but found register beween parenthesis";m[j]=0;break}if(f==-1){nextToken(U);K=getToken(U)}else{K=v[n[O][f++]]}o=true}else{if("(reg)"==P[j][i]){var C="Expected register between parenthesis but found '"+K+"' instead";m[j]=0;break}}if(typeof S[K]=="undefined"){var C="Expected register ($1, ...) but found '"+K+"' instead";m[j]=0;break}if(o){L[i+1]="("+K+")";if(f==-1){nextToken(U);o=getToken(U)}else{o=n[O][f++]}if(")"!=o){var C="String without end parenthesis ')'";m[j]=0;break}}J=isDecimal(S[K]);var G=decimal2binary(J,g);break;default:return langError(U,"An unknown error ocurred (1)")}if(m[j]==1&&!x){if(G[1]<0){if(k.type=="address"&&"rel"==k.address_type){C="Relative value ("+(J-h-WORD_BYTES)+" in decimal) needs "+G[0].length+" bits in binary but there is space for only "+g+" bits"}else{var C="'"+K+"' needs "+G[0].length+" bits in binary but there is space for only "+g+" bits"}m[j]=0}}if(m[j]==1&&(!(w&&f==-1))){M[j][i]={num_bits:(x?false:G[0]),free_space:(x?false:G[1]),startbit:k.startbit,stopbit:k.stopbit,rel:(x?k.address_type:false),islabel:x,field_name:K}}}if(sum_array(m)==0){break}if("TAG"==getTokenType(U)||E[K]){break}}var O;for(i=0;i0&&i0&&i==E[y].length-1){D+=" or "}D+="'"+E[y][i].signatureUser+"'"}var A=sum_array(m);if(A==0){if(m.length==1){return langError(U,C+". Remember that the instruction format has been defined as: "+D)}return langError(U,"Instruction and fields don't match with microprogram. Remember that the instruction formats have been defined as: "+D+". Please check the microcode. Probably you forgot to add a field, a number does not fit in its space, or you just used a wrong instruction")}if(A>1){O=get_candidate(m,E[y]);if(O===false){return langError(U,"Instruction and fields match with more than one microprogram. Please check the microcode. Currently, the instruction format can be: "+D)}}if(w){if(f==-1){var p="";for(i=0;i1){p=" "}if(n[O][f]=="\n"){f++}}var u=reset_assembly(E[y][O].nwords);u=assembly_co_cop(u,E[y][O].co,E[y][O].cop);for(i=0;i=0;i--){if(i=U.text.length){break}}F.seg[I].end=h}function simlang_compile(t,u){var e={};e.line=1;e.error=null;e.i=0;e.contadorMC=0;e.etiquetas={};e.labelsNotFound=[];e.instrucciones=[];e.co_cop={};e.registers=[];e.text=t;e.tokens=[];e.token_types=[];e.t=0;e.newlines=[];e.pseudoInstructions=[];e.stackRegister=null;e.firmware={};e.pseudoInstructions={};e.comments=[];for(i=0;i=0;j--){k.mp["0x"+d.toString(16)]=o.substring(j*WORD_LENGTH,(j+1)*WORD_LENGTH);d+=WORD_BYTES}}if(text_found){if((typeof k.labels2.main=="undefined")&&(typeof k.labels2.kmain=="undefined")){return langError(e,"Tags 'main' or 'kmain' are not defined in the text segment(s). It is compulsory to define at least one of those tags in order to execute a program")}}return k}var WSCFG={};WSCFG.version={value:"2.0.6",type:"string"};function get_cfg(a){return WSCFG[a].value}function set_cfg(d,a){WSCFG[d].value=a}function is_mobile(){if(typeof navigator=="undefined"){return false}return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function reset_cfg(){WSCFG.color_data_active={value:"#0066FF",type:"string"};WSCFG.color_data_inactive={value:"rgb(0, 0, 0)",type:"string"};WSCFG.color_name_active={value:"red",type:"string"};WSCFG.color_name_inactive={value:"rgb(0, 0, 0)",type:"string"};WSCFG.size_active={value:1.25,type:"float"};WSCFG.size_inactive={value:0.02,type:"float"};WSCFG.is_byvalue={value:false,type:"boolean"};WSCFG.RF_display_format={value:16,type:"int"};WSCFG.RF_display_name={value:"numerical",type:"string"};WSCFG.is_editable={value:true,type:"boolean"};WSCFG.DBG_delay={value:5,type:"int"};WSCFG.DBG_level={value:"instruction",type:"string"};WSCFG.DBG_limitins={value:10000,type:"int"};WSCFG.DBG_limitick={value:1000,type:"int"};WSCFG.ICON_theme={value:"classic",type:"string"};WSCFG.NOTIF_delay={value:1000,type:"int"};WSCFG.CPUCU_size={value:6,type:"int"};WSCFG.C1C2_size={value:8,type:"int"};WSCFG.SHOWCODE_label={value:true,type:"boolean"};WSCFG.SHOWCODE_addr={value:true,type:"boolean"};WSCFG.SHOWCODE_hex={value:true,type:"boolean"};WSCFG.SHOWCODE_ins={value:true,type:"boolean"};WSCFG.SHOWCODE_pins={value:true,type:"boolean"};WSCFG.is_interactive={value:true,type:"boolean"};WSCFG.is_quick_interactive={value:false,type:"boolean"};WSCFG.ws_idiom={value:"en",type:"string"};WSCFG.ws_mode={value:"newbie",type:"string"};WSCFG.use_voice={value:false,type:"boolean"};WSCFG.ws_skin={value:"classic",type:"string"};WSCFG.enable_beta={value:true,type:"boolean"};WSCFG.editor_theme={value:"default",type:"string"};WSCFG.editor_mode={value:"default",type:"string"};WSCFG.verbal_verbose={value:"text",type:"string"};WSCFG.base_url={value:"https://wepsim.github.io/wepsim/ws_dist/wepsim-classic.html",type:"string"};if(is_mobile()){WSCFG.NOTIF_delay.value=2000;WSCFG.ICON_theme.value="cat1";WSCFG.CPUCU_size.value=6;WSCFG.C1C2_size.value=12}set_secondary_cfg()}function set_secondary_cfg(){cfg_show_eltos_delay=130;if(get_cfg("DBG_delay")<5){cfg_show_eltos_delay=390}cfg_show_rf_delay=125;if(get_cfg("DBG_delay")<5){cfg_show_rf_delay=375}cfg_show_main_memory_delay=150;if(get_cfg("DBG_delay")<5){cfg_show_main_memory_delay=450}cfg_show_control_memory_delay=120;if(get_cfg("DBG_delay")<5){cfg_show_control_memory_delay=360}cfg_show_asmdbg_pc_delay=50;if(get_cfg("DBG_delay")<3){cfg_show_asmdbg_pc_delay=200}cfg_show_dbg_ir_delay=100;if(get_cfg("DBG_delay")<5){cfg_show_dbg_ir_delay=300}cfg_show_rf_refresh_delay=30;if(get_cfg("DBG_delay")<5){cfg_show_rf_refresh_delay=120}}function save_cfg(){try{for(var d in WSCFG){localStorage.setItem("wepsim_"+d,get_cfg(d))}}catch(a){console.log("WepSIM can not save the configuration in a persistent way on this web browser, found error: \n"+a.message)}set_secondary_cfg()}function restore_cfg(){reset_cfg();for(var d in WSCFG){if(d=="version"){continue}try{set_cfg(d,localStorage.getItem("wepsim_"+d));if(WSCFG[d].type!="string"){set_cfg(d,JSON.parse(get_cfg(d)))}if(get_cfg(d)==null){throw"null values discarted"}}catch(a){console.log("WepSIM can not restore the configuration on this web browser, found error: \n"+a.message);reset_cfg();return}}set_secondary_cfg()}function update_cfg(d,a){WSCFG[d].value=a;simcore_record_append_new("Set configuration option "+d+" to "+a,'update_cfg("'+d+'",'+a+");\n");ga("send","event","config","config."+WSCFG.version.value,"config."+WSCFG.version.value+"."+d+"."+a);save_cfg()}var ws_records=[];var ws_last_played=0;var ws_last_toplay=0;var ws_last_time=0;var ws_last_timer=null;var ws_is_recording=false;var ws_is_playing=false;var ws_record_msg_name="";var ws_record_msg_obj=null;var ws_record_pb_name="";var ws_record_pb_obj=null;function simcore_record_pushElto(e,d,f){var a={timestamp:f,description:e,element:d};ws_records.push(a)}function simcore_record_showMsg(d,e){if(ws_record_msg_obj!==null){ws_record_msg_obj.html(""+d+"/"+ws_records.length+" "+e)}if(ws_record_pb_obj!==null){var a=(100*d)/ws_records.length;ws_record_pb_obj.css("width",a+"%").attr("aria-valuenow",a)}}function simcore_record_playAt(index_current,index_last){if(ws_is_playing===false){simcore_record_showMsg(ws_last_played,"Stopped by user.");return}ws_last_played=index_current;if(index_current>=index_last){simcore_record_showMsg(index_last,"Done.");return}if(ws_records[index_current].description==="_pending event_"){simcore_record_playAt(index_current+1,index_last);return}eval(ws_records[index_current].element);var index_next=index_current+1;simcore_record_showMsg(index_next,ws_records[index_current].description);var wait_time=500;if(index_next0){e--;if(ws_records[e].description==="_pending event_"){break}}if(e===0){simcore_record_setTimeBeforeNow(0);simcore_record_append_new(d,a);return}ws_records[e].description=d;ws_records[e].element=a;simcore_record_showMsg(0,"Recording...")}}function simcore_record_setTimeBeforeNow(a){ws_last_time=Date.now()-a}function simcore_record_addTimeAfterLast(a){ws_last_time=ws_last_time+a}function get_simware(){var a=simhw_internalState("FIRMWARE");if(typeof a.firmware=="undefined"){a.firmware=new Array()}if(typeof a.mp=="undefined"){a.mp=new Object()}if(typeof a.seg=="undefined"){a.seg=new Object()}if(typeof a.assembly=="undefined"){a.assembly=new Object()}if(typeof a.labels=="undefined"){a.labels=new Object()}if(typeof a.labels2=="undefined"){a.labels2=new Object()}if(typeof a.labels_firm=="undefined"){a.labels_firm=new Object()}if(typeof a.registers=="undefined"){a.registers=new Object()}if(typeof a.pseudoInstructions=="undefined"){a.pseudoInstructions=new Object()}if(typeof a.stackRegister=="undefined"){a.stackRegister=new Object()}if(typeof a.cihash=="undefined"){a.cihash=new Object()}if(typeof a.cocop_hash=="undefined"){a.cocop_hash=new Object()}return a}function set_simware(d){var a=simhw_internalState("FIRMWARE");if(typeof d.firmware!="undefined"){a.firmware=d.firmware}if(typeof d.mp!="undefined"){a.mp=d.mp}if(typeof d.registers!="undefined"){a.registers=d.registers}if(typeof d.assembly!="undefined"){a.assembly=d.assembly}if(typeof d.pseudoInstructions!="undefined"){a.pseudoInstructions=d.pseudoInstructions}if(typeof d.seg!="undefined"){a.seg=d.seg}if(typeof d.labels!="undefined"){a.labels=d.labels}if(typeof d.labels2!="undefined"){a.labels2=d.labels2}if(typeof d.labels_firm!="undefined"){a.labels_firm=d.labels_firm}if(typeof d.stackRegister!="undefined"){a.stackRegister=d.stackRegister}if(typeof d.cihash!="undefined"){a.cihash=d.cihash}if(typeof d.cocop_hash!="undefined"){a.cocop_hash=d.cocop_hash}}function array_includes(a,e){if(typeof a.includes!="undefined"){return a.includes(e)}for(var d=0;d0){a=h}if(f>1){break}}if(f>0){update_draw(simhw_sim_signal(a),1)}if(simhw_internalState_get("fire_visible","internalbus")==true){var m=document.getElementById("svg_p");if(m!=null){m=m.contentDocument}if(m!=null){m=m.getElementById("internalbus_fire")}if(m!=null){m.setAttributeNS(null,"visibility","hidden")}if(m!=null){m.style.visibility="hidden"}simhw_internalState_set("fire_visible","internalbus",false)}if(f>1){var m=document.getElementById("svg_p");if(m!=null){m=m.contentDocument}if(m!=null){m=m.getElementById("internalbus_fire")}if(m!=null){m.setAttributeNS(null,"visibility","visible")}if(m!=null){m.style.visibility="visible"}simhw_internalState_set("fire_visible","internalbus",true);simhw_sim_state("BUS_IB").value=4294967295}}function fn_updateE_now(a){if("E"==simhw_sim_signal(a).type){update_state(a)}}function fn_updateE_future(a){if(jit_fire_ndep[a]<1){fn_updateE_now(a)}else{return new Promise(function(e,d){fn_updateE_now(a)})}}function fn_updateL_now(a){update_draw(simhw_sim_signal(a),simhw_sim_signal(a).value);if("L"==simhw_sim_signal(a).type){update_state(a)}}function fn_updateL_future(a){if(jit_fire_ndep[a]<1){fn_updateL_now(a)}else{return new Promise(function(e,d){fn_updateL_now(a)})}}function update_state(d){var a=0;switch(simhw_sim_signal(d).behavior.length){case 0:return;break;case 1:a=0;break;default:a=simhw_sim_signal(d).value;if(simhw_sim_signal(d).behavior.lengtha){break}g=d}if(-1==g){alert("A new 'unknown' instruction is inserted,\nplease edit it (co, nwords, etc.) in the firmware textarea.");var n=new Object();n.name="unknown";n.signature="unknown";n.signatureGlobal="unknown";n.co=0;n.nwords=0;n["mc-start"]=0;n.fields=new Array();n.microcode=new Array();n.microcomments=new Array();e.firmware.push(n);g=e.firmware.length-1}var f=a-parseInt(e.firmware[g]["mc-start"]);if(typeof e.firmware[g]["microcode"][f]=="undefined"){e.firmware[g]["microcode"][f]=new Object();e.firmware[g]["microcomments"][f]=""}e.firmware[g]["microcode"][f][h]=simhw_sim_signal(h).value;if(simhw_sim_signal(h).default_value==simhw_sim_signal(h).value){delete e.firmware[g]["microcode"][f][h]}var m=get_value(simhw_sim_state("REG_IR")).toString(2);m="00000000000000000000000000000000".substring(0,32-m.length)+m;show_memories_values()}function update_signal(f){if(false===get_cfg("is_interactive")){return}for(var d in simhw_sim_signals()){for(var a=0;a>>0);var q="";var g="";var o="";var a="";var t="";var d=0;var m=Math.pow(2,simhw_sim_signal(s).nbits);if(simhw_sim_signal(s).behavior.length==m){o='
    ';for(var f=0;fdefault value'}a=simhw_sim_signal(s).behavior[f];t=compute_signal_verbals(s,f);if(""==t.trim()){t="<without main effect>"}d=f.toString(10);o+='
  1. "}o+="
"}else{o+='
    \n
"}var e=simhw_short_name();if(""==e){e="ep"}var h=bootbox.dialog({title:"
"+s+':
',message:'',value:simhw_sim_signal(s).value,animate:false,size:"large",buttons:{description:{label:'± Description',className:"btn-outline-dark btn-sm col-xs-3 col-sm-3 col-lg-2 mr-auto",callback:function(){$(".bh-all").collapse("toggle");return false}},success:{label:"Save",className:"btn-primary btn-sm col-xs-3 col-sm-2 float-right",callback:function(){s=$("#ask_skey").val();user_input=$("input[name='ask_svalue']:checked").val();if(typeof user_input=="undefined"){user_input=$("input[name='ask_svalue']").val()}simhw_sim_signal(s).value=user_input;propage_signal_update(s)}},close:{label:"Close",className:"btn-danger btn-sm col-xs-3 col-sm-2 float-right",callback:function(){}}}});h.find(".modal-title").addClass("mx-auto");h.find(".bootbox-close-button").addClass("mx-1");$(".dial").knob({min:0,max:(m-1)}).val(simhw_sim_signal(s).value).trigger("change");show_states();show_rf_values()}function update_signal_quick(d){var f=simhw_short_name();if(""==f){f="ep"}var e=Math.pow(2,simhw_sim_signal(d).nbits);var a=simhw_sim_signal(d).value;a=(a+1)%e;simhw_sim_signal(d).value=a;propage_signal_update(d);show_states();show_rf_values()}function propage_signal_update(f){if(true===get_cfg("is_interactive")){if(simhw_sim_signal(f).value!=simhw_sim_signal(f).default_value){simhw_sim_state("REG_MICROINS").value[f]=simhw_sim_signal(f).value}else{delete (simhw_sim_state("REG_MICROINS").value[f])}var d=simhw_sim_ctrlStates_get().mpc.state;var e=get_value(simhw_sim_state(d));if(typeof simhw_internalState_get("MC",e)=="undefined"){simhw_internalState_set("MC",e,new Object());simhw_internalState_set("MC_dashboard",e,new Object())}simhw_internalState_get("MC",e)[f]=simhw_sim_signal(f).value;simhw_internalState_get("MC_dashboard",e)[f]={comment:"",breakpoint:false,state:false,notify:new Array()};update_signal_firmware(f);var a=get_simware();document.getElementById("inputFirmware").value=saveFirmware(a)}compute_behavior("FIRE "+f)}function update_memories(v){set_simware(v);var g=get_simware();simhw_internalState_reset("MC",{});simhw_internalState_reset("MC_dashboard",{});for(var t=0;t1);n=(d.trim().split("break:").length>1);p=d.trim().split("notify:");for(var o=0;o1){for(f=0;f1){for(f=0;f>23)&255)-127;var d=1+((e&8388607)/8388608);var f=a*d*Math.pow(2,g);if(-127===g){if(1===d){f=(a===1)?"+0":"-0"}else{f=a*((e&8388607)/8388607)*Math.pow(2,-126)}}if(128===g){if(1===d){f=(a===1)?"+Inf":"-Inf"}else{f="NaN"}}return f}function hex2char8(a){var d=[];d[0]=String.fromCharCode((a&4278190080)>>24);d[1]=String.fromCharCode((a&16711680)>>16);d[2]=String.fromCharCode((a&65280)>>8);d[3]=String.fromCharCode((a&255)>>0);return d}function pack5(a){return"00000".substring(0,5-a.length)+a}function pack8(a){return"00000000".substring(0,8-a.length)+a}function pack32(a){return"00000000000000000000000000000000".substring(0,32-a.length)+a}function hex2bin(a){var d=a.toString(2);d=pack32(d);d=d.substring(0,4)+" "+d.substring(4,8)+" "+d.substring(8,12)+" "+d.substring(12,16)+"
"+d.substring(16,20)+" "+d.substring(20,24)+" "+d.substring(24,28)+" "+d.substring(28,32);return d}function init_cpu(d){if(d===""){simhw_sim_state("CLK").value=ko_observable(simhw_sim_state("CLK").value);simhw_sim_state("DECO_INS").value=ko_observable(simhw_sim_state("DECO_INS").value);return}var a="
Instructions
 
CLK ticks
 
";$(d).html("
"+a+"
");ko_rebind_state("CLK","clk_context");ko_rebind_state("DECO_INS","ins_context")}function init_config_mp(e){if(e===""){simhw_internalState_reset("MP_wc",ko_observable(0));return}var d="
";d+="
Wait cycles (0 - ∞)
";$(e).html(d);simhw_internalState_reset("MP_wc",ko_observable(0));var a=document.getElementById("mp_wc");ko.applyBindings(simhw_internalState("MP_wc"),a)}function get_deco_from_pc(a){var e="0x"+a.toString(16);var d=simhw_internalState("FIRMWARE");if((typeof d.assembly==="undefined")||(typeof d.assembly[e]==="undefined")||(typeof d.assembly[e].source==="undefined")){return""}return d.assembly[e].source}function show_visgraph(o,q){var t={};var n={};var h=[];var k=0;for(t in simhw_sim_signals()){n[t]=k;h.push({id:k,label:t,title:t});k++}for(var e=0;e=g[".ktext"].begin)){return e}if((f=g[".text"].begin)){return e}e.ok=false;e.msg="The program has finished because the PC register points outside .ktext/.text code segments";return e}function simcore_reset(){var g={};g.msg="";g.ok=true;var k=get_simware();var e=simhw_internalState("FIRMWARE");var a=simhw_internalState("segments");var h=simhw_sim_components();var o=simhw_sim_ctrlStates_get().pc.state;var n=simhw_sim_state(o);var m=e.stackRegister;var d=simhw_sim_states().BR[m];for(var p in h){switch(h[p].name){case"CPU":compute_general_behavior("RESET");if((typeof a[".ktext"]!=="undefined")&&(k.labels2.kmain)){set_value(n,parseInt(k.labels2.kmain));show_asmdbg_pc()}else{if((typeof a[".text"]!=="undefined")&&(k.labels2.main)){set_value(n,parseInt(k.labels2.main));show_asmdbg_pc()}}if((typeof a[".stack"]!=="undefined")&&(typeof d!=="undefined")){set_value(d,parseInt(a[".stack"].begin))}break;case"MEMORY":compute_general_behavior("MEM_RESET");break;case"SCREEN":compute_general_behavior("SCR_RESET");break;case"KBD":compute_general_behavior("KBD_RESET");break;case"IO":compute_general_behavior("IO_RESET");break;default:break}}var f=get_cfg("ws_mode");if("wepmips"!=f){compute_general_behavior("CLOCK")}for(p in h){switch(h[p].name){case"CPU":show_states();show_rf_values();show_rf_names();show_dbg_ir(get_value(simhw_sim_state("REG_IR_DECO")));show_control_memory(simhw_internalState("MC"),simhw_internalState("MC_dashboard"),0,true);break;case"MEMORY":show_main_memory(simhw_internalState("MP"),0,true,false);break;case"SCREEN":set_screen_content("");break;default:break}}return g}function simcore_execute_microinstruction(){var a=simcore_check_if_can_continue();if(false==a.ok){return a}compute_general_behavior("CLOCK");show_states();show_rf_values();show_dbg_mpc();return a}function simcore_execute_microprogram(q){var g=simcore_check_if_can_continue();if(false==g.ok){return g}var f=get_cfg("ws_mode");if("wepmips"==f){compute_general_behavior("CLOCK");compute_general_behavior("CLOCK");show_states();show_rf_values();return g}var m=false;if(q.cycles_limit<0){m=true}var o=null;var h=null;var e="";var p=simhw_internalState("MC");var n=simhw_sim_ctrlStates_get().mpc.state;var k=simhw_sim_state(n);var d=0;var a=0;do{if(3==q.verbosity){o=simcore_simstate_current2state()}else{if(4==q.verbosity){e="0x"+a.toString(16);g.msg=g.msg+"Micropc at "+e+".\t"+get_verbal_from_current_mpc()+"\n"}}compute_general_behavior("CLOCK");if(3==q.verbosity){h=simcore_simstate_current2state();e="0x"+a.toString(16);g.msg=g.msg+"micropc("+e+"):\t"+controlmemory_lineToString(p,a).trim()+":\t\t\t"+simcore_simstate_diff_states(o,h)+"\n"}d++;if(m){q.cycles_limit=d+1}if(d>=q.cycles_limit){g.msg="Warning: clock cycles limit reached in a single instruction.";g.ok=false;break}a=get_value(k);if(typeof p[a]=="undefined"){g.msg="Error: undefined microinstruction at "+a+".";g.ok=false;break}}while((d=n))||((k=t)))){if(2==w.verbosity){o=simcore_simstate_current2state()}m=simcore_execute_microprogram(w);if(false==m.ok){return m}if(2==w.verbosity){h=simcore_simstate_current2state();e="0x"+k.toString(16);f.msg=f.msg+"pc("+e+"):\t"+g.assembly[e].source_original+":\t\t\t"+simcore_simstate_diff_states(o,h)+"\n"}else{if(3==w.verbosity){f.msg=f.msg+m.msg}else{if(4==w.verbosity){f.msg=f.msg+m.msg}}}v++;if(v>w.instruction_limit){f.ok=false;f.msg="more than "+w.instruction_limit+" instructions executed before application ends.";return f}u=k;k=get_value(q)}return f}function simcore_compile_firmware(g){var d={};d.msg="";d.ok=true;if(""==g){d.msg="Empty Firmware";d.ok=false;return d}var a=null;try{a=loadFirmware(g);d.simware=a}catch(f){d.msg="ERROR: at line: "+f.lineNumber+" and column: "+f.columnNumber;d.ok=false;return d}if(a.error!=null){d.msg=a.error;d.ok=false;return d}update_memories(a);simcore_reset();return d}function simcore_compile_assembly(d){var e={};e.msg="";e.ok=true;var a=get_simware();if(a.firmware.length==0){e.msg="Empty microcode, please load the microcode first.";e.ok=false;return e}var f=simlang_compile(d,a);e.simware=f;if(f.error!=null){e.msg=f.error;e.ok=false;return e}set_simware(f);update_memories(a);simcore_reset();return e}function simcore_hardware_export(a){var d={};d.msg="{}";d.ok=false;var e=simhw_getObjByName(a);if(null===e){return d}d.ok=true;d.msg=JSON.stringify(e,function(f,g){if(typeof g==="function"){return"/Function("+g.toString()+")/"}return g});return d}function simcore_hardware_import(hw_json){var ret={};ret.msg="";ret.ok=true;hw_obj=JSON.parse(hw_json,function(key,value){if(typeof value==="string"&&value.startsWith("/Function(")&&value.endsWith(")/")){value=value.substring(10,value.length-2);return eval("("+value+")")}return value});simhw_add(hw_obj);return ret}function simcore_native_get_signal(a){return(get_value(simhw_sim_signal(a))>>>0)}function simcore_native_set_signal(a,d){set_value(simhw_sim_signal(a),d);compute_behavior("FIRE "+a);return d}function simcore_native_get_value(f,a){var e=0;if(("CPU"===f)||("BR"===f)){if(Number.isInteger(a)){e=a}else{e=parseInt(a)}if(isNaN(e)){return(get_value(simhw_sim_state(a))>>>0)}return(get_value(simhw_sim_states().BR[e])>>>0)}if("MEMORY"===f){return(simhw_internalState_get("MP",a)>>>0)}if("DEVICE"===f){var g=simhw_internalState_get("io_hash",a);var h=(get_value(simhw_sim_state(g))>>>0);set_value(simhw_sim_state("BUS_AB"),a);set_value(simhw_sim_signal("IOR"),1);compute_behavior("FIRE IOR");h=get_value(simhw_sim_state("BUS_DB"));return h}if("SCREEN"===f){var d=get_screen_content();return d}return false}function simcore_native_set_value(f,d,h){var e=0;var a=simhw_sim_ctrlStates_get().pc.state;if(("CPU"===f)||("BR"===f)){if(Number.isInteger(d)){e=d}else{e=parseInt(d)}if(isNaN(e)){set_value(simhw_sim_state(d),h);if(a===d){show_asmdbg_pc()}return h}return set_value(simhw_sim_states().BR[e],h)}if("MEMORY"===f){simhw_internalState_set("MP",d,h);return h}if("DEVICE"===f){var g=simhw_internalState_get("io_hash",d);set_value(simhw_sim_state(g),h);set_value(simhw_sim_state("BUS_AB"),d);set_value(simhw_sim_state("BUS_DB"),h);set_value(simhw_sim_signal("IOW"),1);compute_behavior("FIRE IOW");return h}if("SCREEN"===f){set_screen_content(h);return h}return false}function simcore_native_get_fields(d){var a=get_simware();for(var e in a.firmware){if(a.firmware[e].signatureRaw===d){return a.firmware[e].fields}}}function simcore_native_get_field_from_ir(a,d){if(typeof a[d]==="undefined"){return false}var f=get_value(simhw_sim_state("REG_IR"));var g=(31-parseInt(a[d].startbit));var e=parseInt(a[d].stopbit);f=f<>>g;f=f>>>e;return f}function simcore_native_deco(){compute_behavior("DECO")}function simcore_native_go_maddr(a){set_value(simhw_sim_state("MUXA_MICROADDR"),a)}function simcore_native_go_opcode(){var a=get_value(simhw_sim_state("ROM_MUXA"));set_value(simhw_sim_state("MUXA_MICROADDR"),a)}function simcore_native_go_instruction(d){var a=get_simware();for(var f in a.firmware){if(a.firmware[f].signatureRaw===d){var e=a.firmware[f]["mc-start"];set_value(simhw_sim_state("MUXA_MICROADDR"),e);return}}}function simcore_simstate_checklist2state(k){var d={};var h=false;k=k.replace(/;|==|!=|>=|<=|=|>|"===h[e][a].op){m.fulfill=(parseInt(m.obtained)>parseInt(m.expected))}else{if("<"===h[e][a].op){m.fulfill=(parseInt(m.obtained)="===h[e][a].op){m.fulfill=(parseInt(m.obtained)>=parseInt(m.expected))}else{if("<="===h[e][a].op){m.fulfill=(parseInt(m.obtained)<=parseInt(m.expected))}else{if("=="===h[e][a].op){m.fulfill=(m.expected==m.obtained)}else{if("!="===h[e][a].op){m.fulfill=(m.expected!=m.obtained)}}}}}}}n.result.push(m);if(m.fulfill===false){n.errors++}}}if((k)&&(typeof g[e]!="undefined")){for(a in g[e]){n.neltos_obtained++;if((typeof h[e]!="undefined")&&(typeof h[e][a]!="undefined")){continue}m={};m.expected=g[e][a].default_value;m.obtained=g[e][a].value;m.fulfill=(m.expected===m.obtained);m.elto_type=e.toLowerCase();m.elto_id=g[e][a].id;m.elto_op="=";n.result.push(m);if(m.fulfill===false){n.errors++}}}}return n}function simcore_simstate_diff_results(d,a){return simcore_simstate_check_results(d,a,true)}function simcore_simstate_diff_states(d,f){var a=simcore_simstate_state2checklist(d).split(";");var e=simcore_simstate_state2checklist(f).split(";");return e.filter(function(g){return !a.includes(g)}).join(";").trim()}function simcore_simstate_checkreport2txt(d){var e="";for(var a=0;aTypeIdentificationId.Values in the clipboard stateValues in the selected state";for(var e=0;e"+f[e].elto_type+""+f[e].elto_id+""+f[e].elto_op+" "+f[e].expected+""+f[e].obtained+""}g+="";return g}var breakpoint_icon_list=[{type:"classic",shortname:"classic",origin:"https://www.optikunde.de/farbe/rot.php"},{type:"classic",shortname:"pushpin",origin:"http://clipart-library.com/red-push-pin.html"},{type:"pets",shortname:"cat1",origin:""},{type:"pets",shortname:"dog1",origin:""},{type:"films",shortname:"super",origin:"https://worldvectorlogo.com/logo/superman-3"},{type:"films",shortname:"batman",origin:"http://getwallpapers.com/collection/black-and-white-batman-wallpaper"},{type:"films",shortname:"r2d2",origin:"https://imgur.com/gallery/gKSmy"},{type:"films",shortname:"sw",origin:"https://i2.wp.com/icons.iconarchive.com/icons/sensibleworld/starwars/1024/Death-Star-icon.png"},{type:"films",shortname:"bb8",origin:""},{type:"films",shortname:"vader1",origin:""},{type:"films",shortname:"grail",origin:"http://3png.com/a-31243892.html"},{type:"films",shortname:"despicable",origin:"https://www.helloforos.com/t/cerrado/350821/81"},{type:"films",shortname:"lotr4",origin:"http://www.cinecollectibles.com/gentle-giant-c-1_62.html"},{type:"films",shortname:"lotr2",origin:"https://www.forbes.com/sites/adrianbridgwater/2016/01/15/microsoft-r-one-big-data-tool-to-rule-them-all/"},{type:"films",shortname:"hp1",origin:"http://www.logosclicks.com/logos/harry-potter-name-logo-46a93c.html"}];function sim_core_breakpointicon_get(a){return"stop icon"}function hex2values_update(a){var e=parseInt($("#popover1")[0].value);var d=simhw_internalState("filter_states");if(typeof simhw_sim_states()["BR"][a]!="undefined"){set_value(simhw_sim_states()["BR"][a],e);fullshow_rf_values();$("#rf"+a).click();$("#rf"+a).click()}if(typeof simhw_sim_states()[a]!="undefined"){if(1==simhw_sim_states()[a].nbits){e=e%2}set_value(simhw_sim_states()[a],e);fullshow_eltos(simhw_sim_states(),d);$("#rp"+a).click();$("#rp"+a).click()}}function hex2values(p,n){var m=/[0-9A-F]{1,8}/gi;if(!m.test(p)){p=0}var g=p>>0;var o=p>>>0;var a=hex2char8(o);var k=hex2float(o);var e=hex2bin(o);var h=o.toString(16).toUpperCase();h="0x"+pack8(h);var d="";if(get_cfg("is_editable")==true){d=" update"}var f=""+d+"
hex. "+h+"
binary "+e+"
signed "+g+"
unsig. "+o+"
char  "+a[0]+"   "+a[1]+"   "+a[2]+"   "+a[3]+"  
float "+k+"
";return f}function init_rf(f){if(f==""){return}var a="";var e="";for(var d=0;d"+e+" "+(get_value(simhw_sim_states()["BR"][d])>>>0).toString(get_cfg("RF_display_format")).toUpperCase()+""}$(f).html("
"+a+"
");$("[data-toggle=popover-up]").popover({html:true,placement:"auto",animation:false,trigger:"click",template:'',container:"body",content:function(){var h=$(this).attr("data-popover-content");var g=get_value(simhw_sim_states()["BR"][h]);return hex2values(g,h)},title:function(){var g=$(this).attr("data-popover-content");var h=""#rf"+g+""";return'R'+g+''},sanitizeFn:function(g){return g}})}function fullshow_rf_values(){if(typeof document=="undefined"){return}var d=get_simware();for(var e=0;e>>0).toString(get_cfg("RF_display_format")).toUpperCase();if(16==get_cfg("RF_display_format")){a=pack8(a)}$("#tbl_RF"+e).html(a)}}var show_rf_values_deferred=null;function innershow_rf_values(){fullshow_rf_values();show_rf_values_deferred=null}function show_rf_values(){if(null!=show_rf_values_deferred){return}show_rf_values_deferred=setTimeout(innershow_rf_values,cfg_show_rf_delay)}function show_rf_names(){if(typeof document=="undefined"){return}var d=get_simware();var a="";for(var e=0;e1){e=g.substring(0,3);d=g.substring(3,g.length);if(g.length<3){g=''+e+" "}else{g=''+e+""}if(d.length>0){g+=''+d+""}}var m=a[k].split(",")[1];f+=""}$(h).html("
"+f+"
");$("[data-toggle=popover-bottom]").popover({html:true,placement:"bottom",animation:false,content:function(){var q=$(this).attr("data-popover-content");var p=get_value(simhw_sim_states()[q]);return hex2values(p,q)},title:function(){var p=$(this).attr("data-popover-content");var q=""#rp"+p+""";return''+simhw_sim_states()[p].name+''},sanitizeFn:function(p){return p}})}function fullshow_eltos(k,e){if(typeof document=="undefined"){return}for(var d=0;d1){g=(simhw_sim_state(a).value>>>0).toString(get_cfg("RF_display_format")).toUpperCase();if(16==get_cfg("RF_display_format")){g=pack8(g)}}var h=document.getElementById("tbl_"+a);if(h!=null){h.innerHTML=g}}}var show_eltos_deferred=null;function show_eltos(d,a){if(null!=show_eltos_deferred){return}show_eltos_deferred=setTimeout(function(){fullshow_eltos(d,a);show_eltos_deferred=null},cfg_show_eltos_delay)}function init_states(d){var a=simhw_internalState("filter_states");return init_eltos(d,simhw_sim_states(),a)}function show_states(){var a=simhw_internalState("filter_states");return show_eltos(simhw_sim_states(),a)}function ko_observable(a){if(typeof ko!="undefined"){return ko.observable(a).extend({rateLimit:cfg_show_rf_refresh_delay})}else{return a}}function ko_rebind_state(e,f){if(typeof ko=="undefined"){return}var d=simhw_sim_state(e);if(typeof d.value!="function"){d.value=ko.observable(d.value).extend({rateLimit:cfg_show_rf_refresh_delay})}var a=document.getElementById(f);ko.cleanNode(a);ko.applyBindings(simhw_sim_state(e),a)}var screen_content="";var keyboard_content="";function get_screen_content(){var a=null;if(typeof document!="undefined"){a=document.getElementById("kdb_con")}if(a!=null){screen_content=a.value}return screen_content}function set_screen_content(a){screen_content=a;if(typeof document=="undefined"){return}var d=null;if(typeof document!="undefined"){d=document.getElementById("kdb_con")}if(d!=null){d.value=a}}function get_keyboard_content(){if(typeof document=="undefined"){var a=require("readline-sync");var e=a.question("keyboard> ");keyboard_content=e.toString();return keyboard_content}var d=null;if(typeof document!="undefined"){d=document.getElementById("kdb_key")}if(d!=null){keyboard_content=d.value}return keyboard_content}function set_keyboard_content(d){keyboard_content=d;var a=null;if(typeof document!="undefined"){a=document.getElementById("kdb_key")}if(a!=null){a.value=d}}var show_main_memory_deferred=null;var show_main_memory_redraw=false;function show_main_memory(f,a,e,d){if(get_cfg("DBG_delay")>3){show_main_memory_redraw=e||show_main_memory_redraw}if(null!=show_main_memory_deferred){return}show_main_memory_redraw=e;show_main_memory_deferred=setTimeout(function(){if(show_main_memory_redraw==false){light_refresh_main_memory(f,a,d)}else{hard_refresh_main_memory(f,a,d)}show_main_memory_deferred=null;show_main_memory_updates=false},cfg_show_main_memory_delay)}function hard_refresh_main_memory(g,n,u){if(typeof document=="undefined"){return}var f="";var s="";var e="";var o="";var h=new Array();var p=get_simware();var q=new Object();for(var t in p.labels2){q[p.labels2[t]]=t}var d=new Object();var a=simhw_internalState("segments");for(skey in a){d[parseInt(a[skey].begin)]=skey}for(var t in g){s=main_memory_getword(q,h,g,t);e=d[parseInt(t)];if(typeof e!="undefined"){f+='
'+e+"
"}o="0x"+pack5(h[3])+' - 0x'+pack5(h[0]);if(t==n){f+="
"+o+"
"+s+"
"}else{f+="
"+o+"
"+s+"
"}}if(typeof g[n]=="undefined"){f+="
0x"+parseInt(n).toString(16)+"
00 00 00 00
"}$("#memory_MP").html("
"+f+"
");var m=$("#addr"+n);if((u)&&(m.length>0)){var k=m[0].offsetTop;var m=$("#memory_MP");if(m.length>0){m[0].scrollTop=k-100}}old_main_addr=n}function main_memory_getword(g,a,h,e){if(typeof h[e]=="undefined"){return"00 00 00 00"}var f=h[e].toString(16);f=pack8(f);var d=0;for(d=0;d<4;d++){a[d]=(parseInt(e)+d).toString(16)}value2="";for(d=0;d<4;d++){labeli=g["0x"+a[3-d]];valuei=f[d*2]+f[d*2+1];if(typeof labeli!="undefined"){value2+=''+valuei+''+labeli+""}else{value2+=valuei+" "}}return value2}var old_main_addr=0;function light_refresh_main_memory(m,e,k){if(k){var d=new Array();var a=get_simware();var h=new Object();for(var g in a.labels2){h[a.labels2[g]]=g}var f=main_memory_getword(h,d,m,e);o1=$("#mpval"+e);o1.html(f)}o1=$("#addr"+old_main_addr);o1.css("color","black");o1.css("font-weight","normal");old_main_addr=e;o1=$("#addr"+old_main_addr);o1.css("color","blue");o1.css("font-weight","bold")}var show_control_memory_deferred=null;function show_control_memory(f,a,d,e){if(null!=show_control_memory_deferred){return}show_control_memory_deferred=setTimeout(function(){if(false==e){light_refresh_control_memory(f,a,d)}else{hard_refresh_control_memory(f,a,d,e)}show_control_memory_deferred=null},cfg_show_control_memory_delay)}function controlmemory_lineToString(f,a){var d="";for(var e in f[a]){if(1==f[a][e]){d+=e+" ";continue}if("NATIVE"==e){d+="<native> ";continue}if("NATIVE_JIT"==e){d+="<built-in> ";continue}d+=e+"="+parseInt(f[a][e]).toString(2)+" "}return d}function hard_refresh_control_memory(n,h,q,w){if(typeof document=="undefined"){return}var g="";var u="";var d=get_cfg("ICON_theme");var s=get_simware();var t=new Object();for(var v in s.firmware){t[s.firmware[v]["mc-start"]]=s.firmware[v]["name"]}var f="";var e="";var k="";var a=0;for(var v in n){u=controlmemory_lineToString(n,v);f="0x"+parseInt(v).toString(16);if(typeof t[v]!="undefined"){k=t[v];a=5-k.length;if(a>0){for(var m=0;m'+k+''+f+"
"}e=" ";if(true==h[v].breakpoint){e=sim_core_breakpointicon_get(d)}if(v==q){g+=""+f+""+e+""+u+""}else{g+=""+f+""+e+""+u+""}}if(typeof n[q]=="undefined"){g+="0x"+parseInt(q).toString(16)+" "}$("#memory_MC").html("
"+g+"
");var p=$("#maddr"+q);if((w)&&(p.length>0)){var o=p[0].offsetTop;var p=$("#memory_MC");if(p.length>0){p[0].scrollTop=o}}old_mc_addr=q}var old_mc_addr=0;function light_refresh_control_memory(e,a,d){o1=$("#maddr"+old_mc_addr);o1.css("color","black");o1.css("font-weight","normal");old_mc_addr=d;o1=$("#maddr"+old_mc_addr);o1.css("color","blue");o1.css("font-weight","bold")}function firmware2html(A,C){var p=simhw_internalState("filter_signals");var E="coµdir  ";var B=1;for(var D=0;D"+simhw_sim_signals()[t].name+"";B++}E+="";var x="
";x+="";var y=0;var n="";var m="";var G="";for(var D=0;D"+u+" "}else{n+=""}if(C){G="0x"+(w+j).toString(16)}else{G=w+j}n+="";var g=f[j];for(var z=0;z"+e+""+a}if(q){n+=""}else{n+=""}}x+=""+n+""}}x+="
"+m+"  "+G+" "+F+""+F+"
";return x}function labels2html_aux(a,h){var g="";var e="";for(var d=3;d>=0;d--){e="0x"+(parseInt(h)+d).toString(16);if(typeof a[e]!="undefined"){for(var f=0;f"+a[e][f]+"
"}}else{g=g+" "}}return g}function mp2html(d,m,h){var g=new Object();for(var e in m){if(typeof g[m[e]]=="undefined"){g[m[e]]=new Array()}g[m[e]].push(e)}var a="";a+="
";var f="white";for(var p in h){c_begin=parseInt(h[p].begin);c_end=parseInt(h[p].end);f=h[p].color;rows=0;var n="";for(var k=c_begin;k"}rows++}if(0==rows){a+="";rows=2}a+=rows+" align=right>"+h[p].name+" "+n;if(h[p].name!=".stack"){a+=""}}a+="
labelsaddress
byte 3 byte 2 byte 1 byte 0
 31  ......  24   23  ......  16   15  ......  8   7  ......  0 
  segment
"+labels2html_aux(g,c)+""+c.toUpperCase()+""+d[c].substr(0,8)+" "+d[c].substr(8,8)+" "+d[c].substr(16,8)+" "+d[c].substr(24,8)+""+labels2html_aux(g,c)+""+c.toUpperCase()+""+d[c].substr(0,8)+" "+d[c].substr(8,8)+" "+d[c].substr(16,8)+" "+d[c].substr(24,8)+"
 0x"+parseInt(h[p].begin).toString(16).toUpperCase()+"  0x"+parseInt(h[p].end).toString(16).toUpperCase()+"  
 ...... 

";return a}function segments2html(d){var f="
";f+="
";for(var a in d){if(d[a].name!=".stack"){f+=""}}f+="
"+d[a].name+"
...
"+d[".stack"].name+"
  ";var g="";var e="";for(a in d){g="";if(d[a].name!=".stack"){f+=g+""}else{e=g}}f+=e+"
"+d[a].begin+"
"+d[a].end+"
...
";return f}function assembly2html(e,n,k,h){var f="";var s="";var p="";var g="";var d="#F0F0F0";var a="";var t=new Object();for(l in n){if(typeof t[n[l]]=="undefined"){t[n[l]]=new Array()}t[n[l]].push(l)}var q=new Object();for(l in k){laddr="0x"+k[l].begin.toString(16);q[laddr]=l}a+="
";for(l in h){if(d=="#F0F0F0"){d="#F8F8F8"}else{d="#F0F0F0"}h[l].bgcolor=d;s=h[l].source;p=h[l].source_original;g=parseInt(h[l].binary,2).toString(16);g="0x"+"00000000".substring(0,8-g.length)+g;f="";if(typeof t[l]!="undefined"){for(var m=0;m"+t[l][m]+""}}if(s==""){p=''+p+""}else{if(s!=p){s=''+s+"";p=''+p+""}}if(typeof q[l]!="undefined"){a+="";""}a+=""}a+="
"+q[l]+"
"+f+""+l+""+g+""+s+""+p+"
";return a}var show_asmdbg_pc_deferred=null;function innershow_asmdbg_pc(){fullshow_asmdbg_pc();show_asmdbg_pc_deferred=null}function show_asmdbg_pc(){if(get_cfg("DBG_delay")>5){return fullshow_asmdbg_pc()}if(null==show_asmdbg_pc_deferred){show_asmdbg_pc_deferred=setTimeout(innershow_asmdbg_pc,cfg_show_asmdbg_pc_delay)}}var old_addr=0;function fullshow_asmdbg_pc(){if(typeof document=="undefined"){return}var f=null;var a=simhw_sim_ctrlStates_get().pc.state;var e=get_value(simhw_sim_state(a));var g="0x"+e.toString(16);var d=simhw_internalState("FIRMWARE");if(typeof d.assembly[old_addr]!="undefined"){f=$("#asmdbg"+old_addr);f.css("background-color",d.assembly[old_addr].bgcolor)}else{for(l in d.assembly){f=$("#asmdbg"+l);f.css("background-color",d.assembly[l].bgcolor)}}old_addr=g;f=$("#asmdbg"+g);f.css("background-color","#00EE88");return f}function asmdbg_set_breakpoint(h){var d=get_cfg("ICON_theme");var a="0x"+h.toString(16);var e=simhw_internalState("FIRMWARE");var g=document.getElementById("bp"+a);var f=e.assembly[a].breakpoint;if(f===true){f=false;g.innerHTML=" "}else{f=true;g.innerHTML=sim_core_breakpointicon_get(d)}e.assembly[a].breakpoint=f;simcore_record_append_new("Set assembly breakpoint at "+h,"asmdbg_set_breakpoint("+h+");\n")}function dbg_set_breakpoint(g){var a=get_cfg("ICON_theme");var d=get_cfg("DBG_level");var f=document.getElementById("mcpin"+g);var e=simhw_internalState_get("MC_dashboard",g).breakpoint;if(e===true){e=false;f.innerHTML=" "}else{e=true;f.innerHTML=sim_core_breakpointicon_get(a)}simhw_internalState_get("MC_dashboard",g).breakpoint=e;if(e&&("instruction"===d)){simcoreui_notify("INFO","Please remember to change configuration to execute at microinstruction level.","success",get_cfg("NOTIF_delay"))}simcore_record_append_new("Set firmware breakpoint at "+g,"dbg_set_breakpoint("+g+");\n")}function show_dbg_mpc(){var a=simhw_sim_ctrlStates_get().mpc.state;var d=get_value(simhw_sim_state(a));show_control_memory(simhw_internalState("MC"),simhw_internalState("MC_dashboard"),d,false)}var show_dbg_ir_deferred=null;function show_dbg_ir(a){if(null!=show_dbg_ir_deferred){return}show_dbg_ir_deferred=setTimeout(function(){fullshow_dbg_ir(a);show_dbg_ir_deferred=null},cfg_show_dbg_ir_delay)}function fullshow_dbg_ir(a){if(typeof document=="undefined"){return}var d=document.getElementById("svg_p");if(d!=null){d=d.contentDocument}if(d!=null){d=d.getElementById("tspan3899")}if(d!=null){d.innerHTML=a}var d=document.getElementById("svg_cu");if(d!=null){d=d.contentDocument}if(d!=null){d=d.getElementById("text3611")}if(d!=null){d.innerHTML=a}}function init_io(g){var d=0;var f=simhw_internalState("io_int_factory");if(typeof f=="undefined"){return}if(g==""){for(d=0;dInterrupt "+d+" "}e+="
";$(g).html("
"+e+"
");for(d=0;d"+d+"
"}e+="";e+="
";$(g).html(e);var a={};for(d=0;d version: "+d.components[a].version+"
abilities: "+d.components[a].abilities.join(" + ")+"\">"+a+"
"}f=f+"";var e="";e+='
'+d.sim_name+" ("+d.sim_short_name+')

sim_img_processor sim_img_controlunit '+f+"

";return e}function simcoreui_signal_dialog(a){update_signal_dialog(a);$(".popover_hw").popover("hide")}function simcoreui_init_hw_signals(n,f){var h="";var d="";var m="";var g="";var k='';for(var p in n.signals){d=n.signals[p].value;m=n.signals[p].default_value;d="0x"+d.toString(16);m="0x"+m.toString(16);if(d!=m){h="font-weight-bold"}else{h="font-weight-normal"}g="name: "+n.signals[p].name+"
value: "+d+"
default_value: "+m+"
nbits: "+n.signals[p].nbits+"
type: "+n.signals[p].type+"
visible: "+n.signals[p].visible+"
";k=k+''+p+"";if(true==f){$("#hw_signal_strong_"+p).attr("class",h);$("#hw_signal_tt_"+p).attr("data-content",g)}}k=k+"
";var a='
Signals Dependencies
Loading...

'+k+"

";return a}function simcoreui_init_hw_states(p,g){var k="";var f="";var n="";var a="";var s="";var h="";var m='';for(var q in p.states){f="-";n="-";if(typeof p.states[q].value!="undefined"){f=p.states[q].value;n=p.states[q].default_value;if(typeof f=="object"){f="object";n="object"}else{if(typeof f=="function"){f=f()}f="0x"+f.toString(16);n="0x"+n.toString(16)}}if(f!=n){k="font-weight-bold"}else{k="font-weight-normal"}if(typeof p.states[q].nbits!="undefined"){a=p.states[q].nbits}else{a="-"}if(typeof p.states[q].visible!="undefined"){s=p.states[q].visible}else{s="-"}h="name: "+q+"
value: "+f+"
default_value: "+n+"
nbits: "+a+"
visible: "+s+"
";m=m+''+q+"";if(true==g){$("#hw_state_strong_"+q).attr("class",k);$("#hw_state_tt_"+q).attr("data-content",h)}}m=m+"
";var d='
States Control States
Program Counter (PC) → '+p.ctrl_states.pc.state+"
Instruction Register (IR) → "+p.ctrl_states.ir.state+"
Stack Pointer (SP) → "+p.ctrl_states.sp.state+'

'+m+"

";return d}function simcoreui_init_hw_behaviors(d){var f='';for(var a in d.behaviors){f=f+' nparameters: "+d.behaviors[a].nparameters+"
\">"+a+"
"}f=f+"";var e='
Behaviors

'+f+"

";return e}function simcoreui_init_hw(a){var d=simhw_active();var e="";e+=simcoreui_init_hw_summary(d);e+=simcoreui_init_hw_signals(d,false);e+=simcoreui_init_hw_states(d,false);e+=simcoreui_init_hw_behaviors(d);$(a).html(e);$('[data-toggle="tooltip"]').tooltip({trigger:"hover",sanitizeFn:function(f){return f}});$(".popover_hw").popover({trigger:"hover click",container:"body",placement:"auto",template:'',sanitizeFn:function(f){return f}});return true}function simcoreui_show_hw(){var a=simhw_active();simcoreui_init_hw_signals(a,true);simcoreui_init_hw_states(a,true);return true}function simcoreui_voice_canSpeak(){if(typeof window.speechSynthesis=="undefined"){return false}if(false==get_cfg("use_voice")){return false}return true}function simcoreui_voice_speak(d){var a=null;if(simcoreui_voice_canSpeak()){a=new SpeechSynthesisUtterance(d);a.lang="es-ES";if("en"==get_cfg("ws_idiom")){a.lang="en-US"}if("es"==get_cfg("ws_idiom")){a.lang="es-EN"}window.speechSynthesis.speak(a)}}function simcoreui_voice_stopSpeak(){if(simcoreui_voice_canSpeak()){window.speechSynthesis.cancel()}}function get_verbal_from_current_mpc(){var a="";var g="";var d=simhw_sim_ctrlStates_get().mpc.state;var f=get_value(simhw_sim_state(d));var h=simhw_internalState_get("MC",f);for(var e in h){if("MADDR"===e){g=g+"MADDR is "+h[e]+". ";continue}a=a+e+" ";g=g+compute_signal_verbals(e,h[e])}a=a.trim();if(a===""){a=""}if(g.trim()===""){g=""}return"Activated signals are: "+a+". Associated actions are: "+g}function get_verbal_from_current_pc(){var a=simhw_sim_ctrlStates_get().pc.state;var f=get_value(simhw_sim_state(a));var d=parseInt(f)-4;var e=get_deco_from_pc(d);if(""==e.trim()){e="not jet defined"}return"Current instruction is: "+e+" and PC points to "+show_value(d)+". "}function request_html_url(a){var d=null;if(false==is_mobile()){if(navigator.onLine){d=fetch(a)}else{d=caches.match(a).then()}}else{d=$.ajax(a,{type:"GET",dataType:"html"})}return d}function update_div_frompartialhtml(a,e,f){var d="
Sorry, No more details available for this element.

\n";if(""==f){$(a).html(d)}else{$(a).html(f)}if((""==f)||(""==e)){return}var g=$(a).filter(e).html();if(typeof g=="undefined"){g=$(a).find(e).html()}if(typeof g=="undefined"){g=d}$(a).html(g)}function resolve_html_url(a,e,d,f){return request_html_url(e).then(function(g){if(typeof g=="object"){g.text().then(function(h){update_div_frompartialhtml(a,d,h);f()})}else{update_div_frompartialhtml(a,d,g);f()}})}function update_signal_loadhelp(d,g,f){var a=get_cfg("ws_idiom");var e="examples/hardware/"+g+"/help/signals-"+a+".html";resolve_html_url(d,e,"#"+f,function(){$(d).trigger("create")});ga("send","event","help","help.signal","help.signal."+g+"."+f)}function update_checker_loadhelp(d,f){var a=get_cfg("ws_idiom");var e="help/simulator-"+a+".html";resolve_html_url(d,e,"#"+f,function(){$(d).trigger("create")});ga("send","event","help","help.checker","help.checker."+f)}function simcoreui_do_notify(k,m,a,d){var f=$("#alerts-container");if(f.length==0){f=$('

');$("body").append(f)}var e=$('
',message:'',value:simhw_sim_signal(s).value,animate:false,size:"large",buttons:{description:{label:'± Description',className:"btn-outline-dark btn-sm col-xs-3 col-sm-3 col-lg-2 mr-auto",callback:function(){$(".bh-all").collapse("toggle");return false}},success:{label:"Save",className:"btn-primary btn-sm col-xs-3 col-sm-2 float-right",callback:function(){s=$("#ask_skey").val();user_input=$("input[name='ask_svalue']:checked").val();if(typeof user_input=="undefined"){user_input=$("input[name='ask_svalue']").val()}simhw_sim_signal(s).value=user_input;propage_signal_update(s)}},close:{label:"Close",className:"btn-danger btn-sm col-xs-3 col-sm-2 float-right",callback:function(){}}}});h.find(".modal-title").addClass("mx-auto");h.find(".bootbox-close-button").addClass("mx-1");$(".dial").knob({min:0,max:(m-1)}).val(simhw_sim_signal(s).value).trigger("change");show_states();show_rf_values()}function update_signal_quick(d){var f=simhw_short_name();if(""==f){f="ep"}var e=Math.pow(2,simhw_sim_signal(d).nbits);var a=simhw_sim_signal(d).value;a=(a+1)%e;simhw_sim_signal(d).value=a;propage_signal_update(d);show_states();show_rf_values()}function propage_signal_update(f){if(true===get_cfg("is_interactive")){if(simhw_sim_signal(f).value!=simhw_sim_signal(f).default_value){simhw_sim_state("REG_MICROINS").value[f]=simhw_sim_signal(f).value}else{delete (simhw_sim_state("REG_MICROINS").value[f])}var d=simhw_sim_ctrlStates_get().mpc.state;var e=get_value(simhw_sim_state(d));if(typeof simhw_internalState_get("MC",e)=="undefined"){simhw_internalState_set("MC",e,new Object());simhw_internalState_set("MC_dashboard",e,new Object())}simhw_internalState_get("MC",e)[f]=simhw_sim_signal(f).value;simhw_internalState_get("MC_dashboard",e)[f]={comment:"",breakpoint:false,state:false,notify:new Array()};update_signal_firmware(f);var a=get_simware();document.getElementById("inputFirmware").value=saveFirmware(a)}compute_behavior("FIRE "+f)}function update_memories(v){set_simware(v);var g=get_simware();simhw_internalState_reset("MC",{});simhw_internalState_reset("MC_dashboard",{});for(var t=0;t1);n=(d.trim().split("break:").length>1);p=d.trim().split("notify:");for(var o=0;o1){for(f=0;f1){for(f=0;f>23)&255)-127;var d=1+((e&8388607)/8388608);var f=a*d*Math.pow(2,g);if(-127===g){if(1===d){f=(a===1)?"+0":"-0"}else{f=a*((e&8388607)/8388607)*Math.pow(2,-126)}}if(128===g){if(1===d){f=(a===1)?"+Inf":"-Inf"}else{f="NaN"}}return f}function hex2char8(a){var d=[];d[0]=String.fromCharCode((a&4278190080)>>24);d[1]=String.fromCharCode((a&16711680)>>16);d[2]=String.fromCharCode((a&65280)>>8);d[3]=String.fromCharCode((a&255)>>0);return d}function pack5(a){return"00000".substring(0,5-a.length)+a}function pack8(a){return"00000000".substring(0,8-a.length)+a}function pack32(a){return"00000000000000000000000000000000".substring(0,32-a.length)+a}function hex2bin(a){var d=a.toString(2);d=pack32(d);d=d.substring(0,4)+" "+d.substring(4,8)+" "+d.substring(8,12)+" "+d.substring(12,16)+"
"+d.substring(16,20)+" "+d.substring(20,24)+" "+d.substring(24,28)+" "+d.substring(28,32);return d}function init_cpu(d){if(d===""){simhw_sim_state("CLK").value=ko_observable(simhw_sim_state("CLK").value);simhw_sim_state("DECO_INS").value=ko_observable(simhw_sim_state("DECO_INS").value);return}var a="
Instructions
 
CLK ticks
 
";$(d).html("
"+a+"
");ko_rebind_state("CLK","clk_context");ko_rebind_state("DECO_INS","ins_context")}function init_config_mp(e){if(e===""){simhw_internalState_reset("MP_wc",ko_observable(0));return}var d="
";d+="
Wait cycles (0 - ∞)
";$(e).html(d);simhw_internalState_reset("MP_wc",ko_observable(0));var a=document.getElementById("mp_wc");ko.applyBindings(simhw_internalState("MP_wc"),a)}function get_deco_from_pc(a){var e="0x"+a.toString(16);var d=simhw_internalState("FIRMWARE");if((typeof d.assembly==="undefined")||(typeof d.assembly[e]==="undefined")||(typeof d.assembly[e].source==="undefined")){return""}return d.assembly[e].source}function show_visgraph(o,q){var t={};var n={};var h=[];var k=0;for(t in simhw_sim_signals()){n[t]=k;h.push({id:k,label:t,title:t});k++}for(var e=0;e=g[".ktext"].begin)){return e}if((f=g[".text"].begin)){return e}e.ok=false;e.msg="The program has finished because the PC register points outside .ktext/.text code segments";return e}function simcore_reset(){var g={};g.msg="";g.ok=true;var k=get_simware();var e=simhw_internalState("FIRMWARE");var a=simhw_internalState("segments");var h=simhw_sim_components();var o=simhw_sim_ctrlStates_get().pc.state;var n=simhw_sim_state(o);var m=e.stackRegister;var d=simhw_sim_states().BR[m];for(var p in h){switch(h[p].name){case"CPU":compute_general_behavior("RESET");if((typeof a[".ktext"]!=="undefined")&&(k.labels2.kmain)){set_value(n,parseInt(k.labels2.kmain));show_asmdbg_pc()}else{if((typeof a[".text"]!=="undefined")&&(k.labels2.main)){set_value(n,parseInt(k.labels2.main));show_asmdbg_pc()}}if((typeof a[".stack"]!=="undefined")&&(typeof d!=="undefined")){set_value(d,parseInt(a[".stack"].begin))}break;case"MEMORY":compute_general_behavior("MEM_RESET");break;case"SCREEN":compute_general_behavior("SCR_RESET");break;case"KBD":compute_general_behavior("KBD_RESET");break;case"IO":compute_general_behavior("IO_RESET");break;default:break}}var f=get_cfg("ws_mode");if("wepmips"!=f){compute_general_behavior("CLOCK")}for(p in h){switch(h[p].name){case"CPU":show_states();show_rf_values();show_rf_names();show_dbg_ir(get_value(simhw_sim_state("REG_IR_DECO")));show_control_memory(simhw_internalState("MC"),simhw_internalState("MC_dashboard"),0,true);break;case"MEMORY":show_main_memory(simhw_internalState("MP"),0,true,false);break;case"SCREEN":set_screen_content("");break;default:break}}return g}function simcore_execute_microinstruction(){var a=simcore_check_if_can_continue();if(false==a.ok){return a}compute_general_behavior("CLOCK");show_states();show_rf_values();show_dbg_mpc();return a}function simcore_execute_microprogram(q){var g=simcore_check_if_can_continue();if(false==g.ok){return g}var f=get_cfg("ws_mode");if("wepmips"==f){compute_general_behavior("CLOCK");compute_general_behavior("CLOCK");show_states();show_rf_values();return g}var m=false;if(q.cycles_limit<0){m=true}var o=null;var h=null;var e="";var p=simhw_internalState("MC");var n=simhw_sim_ctrlStates_get().mpc.state;var k=simhw_sim_state(n);var d=0;var a=0;do{if(3==q.verbosity){o=simcore_simstate_current2state()}else{if(4==q.verbosity){e="0x"+a.toString(16);g.msg=g.msg+"Micropc at "+e+".\t"+get_verbal_from_current_mpc()+"\n"}}compute_general_behavior("CLOCK");if(3==q.verbosity){h=simcore_simstate_current2state();e="0x"+a.toString(16);g.msg=g.msg+"micropc("+e+"):\t"+controlmemory_lineToString(p,a).trim()+":\t\t\t"+simcore_simstate_diff_states(o,h)+"\n"}d++;if(m){q.cycles_limit=d+1}if(d>=q.cycles_limit){g.msg="Warning: clock cycles limit reached in a single instruction.";g.ok=false;break}a=get_value(k);if(typeof p[a]=="undefined"){g.msg="Error: undefined microinstruction at "+a+".";g.ok=false;break}}while((d=n))||((k=t)))){if(2==w.verbosity){o=simcore_simstate_current2state()}m=simcore_execute_microprogram(w);if(false==m.ok){return m}if(2==w.verbosity){h=simcore_simstate_current2state();e="0x"+k.toString(16);f.msg=f.msg+"pc("+e+"):\t"+g.assembly[e].source_original+":\t\t\t"+simcore_simstate_diff_states(o,h)+"\n"}else{if(3==w.verbosity){f.msg=f.msg+m.msg}else{if(4==w.verbosity){f.msg=f.msg+m.msg}}}v++;if(v>w.instruction_limit){f.ok=false;f.msg="more than "+w.instruction_limit+" instructions executed before application ends.";return f}u=k;k=get_value(q)}return f}function simcore_compile_firmware(g){var d={};d.msg="";d.ok=true;if(""==g){d.msg="Empty Firmware";d.ok=false;return d}var a=null;try{a=loadFirmware(g);d.simware=a}catch(f){d.msg="ERROR: at line: "+f.lineNumber+" and column: "+f.columnNumber;d.ok=false;return d}if(a.error!=null){d.msg=a.error;d.ok=false;return d}update_memories(a);simcore_reset();return d}function simcore_compile_assembly(d){var e={};e.msg="";e.ok=true;var a=get_simware();if(a.firmware.length==0){e.msg="Empty microcode, please load the microcode first.";e.ok=false;return e}var f=simlang_compile(d,a);e.simware=f;if(f.error!=null){e.msg=f.error;e.ok=false;return e}set_simware(f);update_memories(a);simcore_reset();return e}function simcore_hardware_export(a){var d={};d.msg="{}";d.ok=false;var e=simhw_getObjByName(a);if(null===e){return d}d.ok=true;d.msg=JSON.stringify(e,function(f,g){if(typeof g==="function"){return"/Function("+g.toString()+")/"}return g});return d}function simcore_hardware_import(hw_json){var ret={};ret.msg="";ret.ok=true;hw_obj=JSON.parse(hw_json,function(key,value){if(typeof value==="string"&&value.startsWith("/Function(")&&value.endsWith(")/")){value=value.substring(10,value.length-2);return eval("("+value+")")}return value});simhw_add(hw_obj);return ret}function simcore_native_get_signal(a){return(get_value(simhw_sim_signal(a))>>>0)}function simcore_native_set_signal(a,d){set_value(simhw_sim_signal(a),d);compute_behavior("FIRE "+a);return d}function simcore_native_get_value(f,a){var e=0;if(("CPU"===f)||("BR"===f)){if(Number.isInteger(a)){e=a}else{e=parseInt(a)}if(isNaN(e)){return(get_value(simhw_sim_state(a))>>>0)}return(get_value(simhw_sim_states().BR[e])>>>0)}if("MEMORY"===f){return(simhw_internalState_get("MP",a)>>>0)}if("DEVICE"===f){var g=simhw_internalState_get("io_hash",a);var h=(get_value(simhw_sim_state(g))>>>0);set_value(simhw_sim_state("BUS_AB"),a);set_value(simhw_sim_signal("IOR"),1);compute_behavior("FIRE IOR");h=get_value(simhw_sim_state("BUS_DB"));return h}if("SCREEN"===f){var d=get_screen_content();return d}return false}function simcore_native_set_value(f,d,h){var e=0;var a=simhw_sim_ctrlStates_get().pc.state;if(("CPU"===f)||("BR"===f)){if(Number.isInteger(d)){e=d}else{e=parseInt(d)}if(isNaN(e)){set_value(simhw_sim_state(d),h);if(a===d){show_asmdbg_pc()}return h}return set_value(simhw_sim_states().BR[e],h)}if("MEMORY"===f){simhw_internalState_set("MP",d,h);return h}if("DEVICE"===f){var g=simhw_internalState_get("io_hash",d);set_value(simhw_sim_state(g),h);set_value(simhw_sim_state("BUS_AB"),d);set_value(simhw_sim_state("BUS_DB"),h);set_value(simhw_sim_signal("IOW"),1);compute_behavior("FIRE IOW");return h}if("SCREEN"===f){set_screen_content(h);return h}return false}function simcore_native_get_fields(d){var a=get_simware();for(var e in a.firmware){if(a.firmware[e].signatureRaw===d){return a.firmware[e].fields}}}function simcore_native_get_field_from_ir(a,d){if(typeof a[d]==="undefined"){return false}var f=get_value(simhw_sim_state("REG_IR"));var g=(31-parseInt(a[d].startbit));var e=parseInt(a[d].stopbit);f=f<>>g;f=f>>>e;return f}function simcore_native_deco(){compute_behavior("DECO")}function simcore_native_go_maddr(a){set_value(simhw_sim_state("MUXA_MICROADDR"),a)}function simcore_native_go_opcode(){var a=get_value(simhw_sim_state("ROM_MUXA"));set_value(simhw_sim_state("MUXA_MICROADDR"),a)}function simcore_native_go_instruction(d){var a=get_simware();for(var f in a.firmware){if(a.firmware[f].signatureRaw===d){var e=a.firmware[f]["mc-start"];set_value(simhw_sim_state("MUXA_MICROADDR"),e);return}}}function simcore_simstate_checklist2state(k){var d={};var h=false;k=k.replace(/;|==|!=|>=|<=|=|>|"===h[e][a].op){m.fulfill=(parseInt(m.obtained)>parseInt(m.expected))}else{if("<"===h[e][a].op){m.fulfill=(parseInt(m.obtained)="===h[e][a].op){m.fulfill=(parseInt(m.obtained)>=parseInt(m.expected))}else{if("<="===h[e][a].op){m.fulfill=(parseInt(m.obtained)<=parseInt(m.expected))}else{if("=="===h[e][a].op){m.fulfill=(m.expected==m.obtained)}else{if("!="===h[e][a].op){m.fulfill=(m.expected!=m.obtained)}}}}}}}n.result.push(m);if(m.fulfill===false){n.errors++}}}if((k)&&(typeof g[e]!="undefined")){for(a in g[e]){n.neltos_obtained++;if((typeof h[e]!="undefined")&&(typeof h[e][a]!="undefined")){continue}m={};m.expected=g[e][a].default_value;m.obtained=g[e][a].value;m.fulfill=(m.expected===m.obtained);m.elto_type=e.toLowerCase();m.elto_id=g[e][a].id;m.elto_op="=";n.result.push(m);if(m.fulfill===false){n.errors++}}}}return n}function simcore_simstate_diff_results(d,a){return simcore_simstate_check_results(d,a,true)}function simcore_simstate_diff_states(d,f){var a=simcore_simstate_state2checklist(d).split(";");var e=simcore_simstate_state2checklist(f).split(";");return e.filter(function(g){return !a.includes(g)}).join(";").trim()}function simcore_simstate_checkreport2txt(d){var e="";for(var a=0;aTypeIdentificationId.Values in the clipboard stateValues in the selected state";for(var e=0;e"+f[e].elto_type+""+f[e].elto_id+""+f[e].elto_op+" "+f[e].expected+""+f[e].obtained+""}g+="";return g}var breakpoint_icon_list=[{type:"classic",shortname:"classic",origin:"https://www.optikunde.de/farbe/rot.php"},{type:"classic",shortname:"pushpin",origin:"http://clipart-library.com/red-push-pin.html"},{type:"pets",shortname:"cat1",origin:""},{type:"pets",shortname:"dog1",origin:""},{type:"films",shortname:"super",origin:"https://worldvectorlogo.com/logo/superman-3"},{type:"films",shortname:"batman",origin:"http://getwallpapers.com/collection/black-and-white-batman-wallpaper"},{type:"films",shortname:"r2d2",origin:"https://imgur.com/gallery/gKSmy"},{type:"films",shortname:"sw",origin:"https://i2.wp.com/icons.iconarchive.com/icons/sensibleworld/starwars/1024/Death-Star-icon.png"},{type:"films",shortname:"bb8",origin:""},{type:"films",shortname:"vader1",origin:""},{type:"films",shortname:"grail",origin:"http://3png.com/a-31243892.html"},{type:"films",shortname:"despicable",origin:"https://www.helloforos.com/t/cerrado/350821/81"},{type:"films",shortname:"lotr4",origin:"http://www.cinecollectibles.com/gentle-giant-c-1_62.html"},{type:"films",shortname:"lotr2",origin:"https://www.forbes.com/sites/adrianbridgwater/2016/01/15/microsoft-r-one-big-data-tool-to-rule-them-all/"},{type:"films",shortname:"hp1",origin:"http://www.logosclicks.com/logos/harry-potter-name-logo-46a93c.html"}];function sim_core_breakpointicon_get(a){return"stop icon"}function hex2values_update(a){var e=parseInt($("#popover1")[0].value);var d=simhw_internalState("filter_states");if(typeof simhw_sim_states()["BR"][a]!="undefined"){set_value(simhw_sim_states()["BR"][a],e);fullshow_rf_values();$("#rf"+a).click();$("#rf"+a).click()}if(typeof simhw_sim_states()[a]!="undefined"){if(1==simhw_sim_states()[a].nbits){e=e%2}set_value(simhw_sim_states()[a],e);fullshow_eltos(simhw_sim_states(),d);$("#rp"+a).click();$("#rp"+a).click()}}function hex2values(p,n){var m=/[0-9A-F]{1,8}/gi;if(!m.test(p)){p=0}var g=p>>0;var o=p>>>0;var a=hex2char8(o);var k=hex2float(o);var e=hex2bin(o);var h=o.toString(16).toUpperCase();h="0x"+pack8(h);var d="";if(get_cfg("is_editable")==true){d=" update"}var f=""+d+"
hex. "+h+"
binary "+e+"
signed "+g+"
unsig. "+o+"
char  "+a[0]+"   "+a[1]+"   "+a[2]+"   "+a[3]+"  
float "+k+"
";return f}function init_rf(f){if(f==""){return}var a="";var e="";for(var d=0;d"+e+" "+(get_value(simhw_sim_states()["BR"][d])>>>0).toString(get_cfg("RF_display_format")).toUpperCase()+""}$(f).html("
"+a+"
");$("[data-toggle=popover-up]").popover({html:true,placement:"auto",animation:false,trigger:"click",template:'',container:"body",content:function(){var h=$(this).attr("data-popover-content");var g=get_value(simhw_sim_states()["BR"][h]);return hex2values(g,h)},title:function(){var g=$(this).attr("data-popover-content");var h=""#rf"+g+""";return'R'+g+''},sanitizeFn:function(g){return g}})}function fullshow_rf_values(){if(typeof document=="undefined"){return}var d=get_simware();for(var e=0;e>>0).toString(get_cfg("RF_display_format")).toUpperCase();if(16==get_cfg("RF_display_format")){a=pack8(a)}$("#tbl_RF"+e).html(a)}}var show_rf_values_deferred=null;function innershow_rf_values(){fullshow_rf_values();show_rf_values_deferred=null}function show_rf_values(){if(null!=show_rf_values_deferred){return}show_rf_values_deferred=setTimeout(innershow_rf_values,cfg_show_rf_delay)}function show_rf_names(){if(typeof document=="undefined"){return}var d=get_simware();var a="";for(var e=0;e1){e=g.substring(0,3);d=g.substring(3,g.length);if(g.length<3){g=''+e+" "}else{g=''+e+""}if(d.length>0){g+=''+d+""}}var m=a[k].split(",")[1];f+=""}$(h).html("
"+f+"
");$("[data-toggle=popover-bottom]").popover({html:true,placement:"bottom",animation:false,content:function(){var q=$(this).attr("data-popover-content");var p=get_value(simhw_sim_states()[q]);return hex2values(p,q)},title:function(){var p=$(this).attr("data-popover-content");var q=""#rp"+p+""";return''+simhw_sim_states()[p].name+''},sanitizeFn:function(p){return p}})}function fullshow_eltos(k,e){if(typeof document=="undefined"){return}for(var d=0;d1){g=(simhw_sim_state(a).value>>>0).toString(get_cfg("RF_display_format")).toUpperCase();if(16==get_cfg("RF_display_format")){g=pack8(g)}}var h=document.getElementById("tbl_"+a);if(h!=null){h.innerHTML=g}}}var show_eltos_deferred=null;function show_eltos(d,a){if(null!=show_eltos_deferred){return}show_eltos_deferred=setTimeout(function(){fullshow_eltos(d,a);show_eltos_deferred=null},cfg_show_eltos_delay)}function init_states(d){var a=simhw_internalState("filter_states");return init_eltos(d,simhw_sim_states(),a)}function show_states(){var a=simhw_internalState("filter_states");return show_eltos(simhw_sim_states(),a)}function ko_observable(a){if(typeof ko!="undefined"){return ko.observable(a).extend({rateLimit:cfg_show_rf_refresh_delay})}else{return a}}function ko_rebind_state(e,f){if(typeof ko=="undefined"){return}var d=simhw_sim_state(e);if(typeof d.value!="function"){d.value=ko.observable(d.value).extend({rateLimit:cfg_show_rf_refresh_delay})}var a=document.getElementById(f);ko.cleanNode(a);ko.applyBindings(simhw_sim_state(e),a)}var screen_content="";var keyboard_content="";function get_screen_content(){var a=null;if(typeof document!="undefined"){a=document.getElementById("kdb_con")}if(a!=null){screen_content=a.value}return screen_content}function set_screen_content(a){screen_content=a;if(typeof document=="undefined"){return}var d=null;if(typeof document!="undefined"){d=document.getElementById("kdb_con")}if(d!=null){d.value=a}}function get_keyboard_content(){if(typeof document=="undefined"){var a=require("readline-sync");var e=a.question("keyboard> ");keyboard_content=e.toString();return keyboard_content}var d=null;if(typeof document!="undefined"){d=document.getElementById("kdb_key")}if(d!=null){keyboard_content=d.value}return keyboard_content}function set_keyboard_content(d){keyboard_content=d;var a=null;if(typeof document!="undefined"){a=document.getElementById("kdb_key")}if(a!=null){a.value=d}}var show_main_memory_deferred=null;var show_main_memory_redraw=false;function show_main_memory(f,a,e,d){if(get_cfg("DBG_delay")>3){show_main_memory_redraw=e||show_main_memory_redraw}if(null!=show_main_memory_deferred){return}show_main_memory_redraw=e;show_main_memory_deferred=setTimeout(function(){if(show_main_memory_redraw==false){light_refresh_main_memory(f,a,d)}else{hard_refresh_main_memory(f,a,d)}show_main_memory_deferred=null;show_main_memory_updates=false},cfg_show_main_memory_delay)}function hard_refresh_main_memory(g,n,u){if(typeof document=="undefined"){return}var f="";var s="";var e="";var o="";var h=new Array();var p=get_simware();var q=new Object();for(var t in p.labels2){q[p.labels2[t]]=t}var d=new Object();var a=simhw_internalState("segments");for(skey in a){d[parseInt(a[skey].begin)]=skey}for(var t in g){s=main_memory_getword(q,h,g,t);e=d[parseInt(t)];if(typeof e!="undefined"){f+='
'+e+"
"}o="0x"+pack5(h[3])+' - 0x'+pack5(h[0]);if(t==n){f+="
"+o+"
"+s+"
"}else{f+="
"+o+"
"+s+"
"}}if(typeof g[n]=="undefined"){f+="
0x"+parseInt(n).toString(16)+"
00 00 00 00
"}$("#memory_MP").html("
"+f+"
");var m=$("#addr"+n);if((u)&&(m.length>0)){var k=m[0].offsetTop;var m=$("#memory_MP");if(m.length>0){m[0].scrollTop=k-100}}old_main_addr=n}function main_memory_getword(g,a,h,e){if(typeof h[e]=="undefined"){return"00 00 00 00"}var f=h[e].toString(16);f=pack8(f);var d=0;for(d=0;d<4;d++){a[d]=(parseInt(e)+d).toString(16)}value2="";for(d=0;d<4;d++){labeli=g["0x"+a[3-d]];valuei=f[d*2]+f[d*2+1];if(typeof labeli!="undefined"){value2+=''+valuei+''+labeli+""}else{value2+=valuei+" "}}return value2}var old_main_addr=0;function light_refresh_main_memory(m,e,k){if(k){var d=new Array();var a=get_simware();var h=new Object();for(var g in a.labels2){h[a.labels2[g]]=g}var f=main_memory_getword(h,d,m,e);o1=$("#mpval"+e);o1.html(f)}o1=$("#addr"+old_main_addr);o1.css("color","black");o1.css("font-weight","normal");old_main_addr=e;o1=$("#addr"+old_main_addr);o1.css("color","blue");o1.css("font-weight","bold")}var show_control_memory_deferred=null;function show_control_memory(f,a,d,e){if(null!=show_control_memory_deferred){return}show_control_memory_deferred=setTimeout(function(){if(false==e){light_refresh_control_memory(f,a,d)}else{hard_refresh_control_memory(f,a,d,e)}show_control_memory_deferred=null},cfg_show_control_memory_delay)}function controlmemory_lineToString(f,a){var d="";for(var e in f[a]){if(1==f[a][e]){d+=e+" ";continue}if("NATIVE"==e){d+="<native> ";continue}if("NATIVE_JIT"==e){d+="<built-in> ";continue}d+=e+"="+parseInt(f[a][e]).toString(2)+" "}return d}function hard_refresh_control_memory(n,h,q,w){if(typeof document=="undefined"){return}var g="";var u="";var d=get_cfg("ICON_theme");var s=get_simware();var t=new Object();for(var v in s.firmware){t[s.firmware[v]["mc-start"]]=s.firmware[v]["name"]}var f="";var e="";var k="";var a=0;for(var v in n){u=controlmemory_lineToString(n,v);f="0x"+parseInt(v).toString(16);if(typeof t[v]!="undefined"){k=t[v];a=5-k.length;if(a>0){for(var m=0;m'+k+''+f+"
"}e=" ";if(true==h[v].breakpoint){e=sim_core_breakpointicon_get(d)}if(v==q){g+=""+f+""+e+""+u+""}else{g+=""+f+""+e+""+u+""}}if(typeof n[q]=="undefined"){g+="0x"+parseInt(q).toString(16)+" "}$("#memory_MC").html("
"+g+"
");var p=$("#maddr"+q);if((w)&&(p.length>0)){var o=p[0].offsetTop;var p=$("#memory_MC");if(p.length>0){p[0].scrollTop=o}}old_mc_addr=q}var old_mc_addr=0;function light_refresh_control_memory(e,a,d){o1=$("#maddr"+old_mc_addr);o1.css("color","black");o1.css("font-weight","normal");old_mc_addr=d;o1=$("#maddr"+old_mc_addr);o1.css("color","blue");o1.css("font-weight","bold")}function firmware2html(A,C){var p=simhw_internalState("filter_signals");var E="coµdir  ";var B=1;for(var D=0;D"+simhw_sim_signals()[t].name+"";B++}E+="";var x="
";x+="";var y=0;var n="";var m="";var G="";for(var D=0;D"+u+" "}else{n+=""}if(C){G="0x"+(w+j).toString(16)}else{G=w+j}n+="";var g=f[j];for(var z=0;z"+e+""+a}if(q){n+=""}else{n+=""}}x+=""+n+""}}x+="
"+m+"  "+G+" "+F+""+F+"
";return x}function labels2html_aux(a,h){var g="";var e="";for(var d=3;d>=0;d--){e="0x"+(parseInt(h)+d).toString(16);if(typeof a[e]!="undefined"){for(var f=0;f"+a[e][f]+"
"}}else{g=g+" "}}return g}function mp2html(d,m,h){var g=new Object();for(var e in m){if(typeof g[m[e]]=="undefined"){g[m[e]]=new Array()}g[m[e]].push(e)}var a="";a+="
";var f="white";for(var p in h){c_begin=parseInt(h[p].begin);c_end=parseInt(h[p].end);f=h[p].color;rows=0;var n="";for(var k=c_begin;k"}rows++}if(0==rows){a+="";rows=2}a+=rows+" align=right>"+h[p].name+" "+n;if(h[p].name!=".stack"){a+=""}}a+="
labelsaddress
byte 3 byte 2 byte 1 byte 0
 31  ......  24   23  ......  16   15  ......  8   7  ......  0 
  segment
"+labels2html_aux(g,c)+""+c.toUpperCase()+""+d[c].substr(0,8)+" "+d[c].substr(8,8)+" "+d[c].substr(16,8)+" "+d[c].substr(24,8)+""+labels2html_aux(g,c)+""+c.toUpperCase()+""+d[c].substr(0,8)+" "+d[c].substr(8,8)+" "+d[c].substr(16,8)+" "+d[c].substr(24,8)+"
 0x"+parseInt(h[p].begin).toString(16).toUpperCase()+"  0x"+parseInt(h[p].end).toString(16).toUpperCase()+"  
 ...... 

";return a}function segments2html(d){var f="
";f+="
";for(var a in d){if(d[a].name!=".stack"){f+=""}}f+="
"+d[a].name+"
...
"+d[".stack"].name+"
  ";var g="";var e="";for(a in d){g="";if(d[a].name!=".stack"){f+=g+""}else{e=g}}f+=e+"
"+d[a].begin+"
"+d[a].end+"
...
";return f}function assembly2html(e,n,k,h){var f="";var s="";var p="";var g="";var d="#F0F0F0";var a="";var t=new Object();for(l in n){if(typeof t[n[l]]=="undefined"){t[n[l]]=new Array()}t[n[l]].push(l)}var q=new Object();for(l in k){laddr="0x"+k[l].begin.toString(16);q[laddr]=l}a+="
";for(l in h){if(d=="#F0F0F0"){d="#F8F8F8"}else{d="#F0F0F0"}h[l].bgcolor=d;s=h[l].source;p=h[l].source_original;g=parseInt(h[l].binary,2).toString(16);g="0x"+"00000000".substring(0,8-g.length)+g;f="";if(typeof t[l]!="undefined"){for(var m=0;m"+t[l][m]+""}}if(s==""){p=''+p+""}else{if(s!=p){s=''+s+"";p=''+p+""}}if(typeof q[l]!="undefined"){a+="";""}a+=""}a+="
"+q[l]+"
"+f+""+l+""+g+""+s+""+p+"
";return a}var show_asmdbg_pc_deferred=null;function innershow_asmdbg_pc(){fullshow_asmdbg_pc();show_asmdbg_pc_deferred=null}function show_asmdbg_pc(){if(get_cfg("DBG_delay")>5){return fullshow_asmdbg_pc()}if(null==show_asmdbg_pc_deferred){show_asmdbg_pc_deferred=setTimeout(innershow_asmdbg_pc,cfg_show_asmdbg_pc_delay)}}var old_addr=0;function fullshow_asmdbg_pc(){if(typeof document=="undefined"){return}var f=null;var a=simhw_sim_ctrlStates_get().pc.state;var e=get_value(simhw_sim_state(a));var g="0x"+e.toString(16);var d=simhw_internalState("FIRMWARE");if(typeof d.assembly[old_addr]!="undefined"){f=$("#asmdbg"+old_addr);f.css("background-color",d.assembly[old_addr].bgcolor)}else{for(l in d.assembly){f=$("#asmdbg"+l);f.css("background-color",d.assembly[l].bgcolor)}}old_addr=g;f=$("#asmdbg"+g);f.css("background-color","#00EE88");return f}function asmdbg_set_breakpoint(h){var d=get_cfg("ICON_theme");var a="0x"+h.toString(16);var e=simhw_internalState("FIRMWARE");var g=document.getElementById("bp"+a);var f=e.assembly[a].breakpoint;if(f===true){f=false;g.innerHTML=" "}else{f=true;g.innerHTML=sim_core_breakpointicon_get(d)}e.assembly[a].breakpoint=f;simcore_record_append_new("Set assembly breakpoint at "+h,"asmdbg_set_breakpoint("+h+");\n")}function dbg_set_breakpoint(g){var a=get_cfg("ICON_theme");var d=get_cfg("DBG_level");var f=document.getElementById("mcpin"+g);var e=simhw_internalState_get("MC_dashboard",g).breakpoint;if(e===true){e=false;f.innerHTML=" "}else{e=true;f.innerHTML=sim_core_breakpointicon_get(a)}simhw_internalState_get("MC_dashboard",g).breakpoint=e;if(e&&("instruction"===d)){simcoreui_notify("INFO","Please remember to change configuration to execute at microinstruction level.","success",get_cfg("NOTIF_delay"))}simcore_record_append_new("Set firmware breakpoint at "+g,"dbg_set_breakpoint("+g+");\n")}function show_dbg_mpc(){var a=simhw_sim_ctrlStates_get().mpc.state;var d=get_value(simhw_sim_state(a));show_control_memory(simhw_internalState("MC"),simhw_internalState("MC_dashboard"),d,false)}var show_dbg_ir_deferred=null;function show_dbg_ir(a){if(null!=show_dbg_ir_deferred){return}show_dbg_ir_deferred=setTimeout(function(){fullshow_dbg_ir(a);show_dbg_ir_deferred=null},cfg_show_dbg_ir_delay)}function fullshow_dbg_ir(a){if(typeof document=="undefined"){return}var d=document.getElementById("svg_p");if(d!=null){d=d.contentDocument}if(d!=null){d=d.getElementById("tspan3899")}if(d!=null){d.innerHTML=a}var d=document.getElementById("svg_cu");if(d!=null){d=d.contentDocument}if(d!=null){d=d.getElementById("text3611")}if(d!=null){d.innerHTML=a}}function init_io(g){var d=0;var f=simhw_internalState("io_int_factory");if(typeof f=="undefined"){return}if(g==""){for(d=0;dInterrupt "+d+" "}e+="
";$(g).html("
"+e+"
");for(d=0;d"+d+"
"}e+="";e+="
";$(g).html(e);var a={};for(d=0;d version: "+d.components[a].version+"
abilities: "+d.components[a].abilities.join(" + ")+"\">"+a+"
"}f=f+"";var e="";e+='
'+d.sim_name+" ("+d.sim_short_name+')

sim_img_processor sim_img_controlunit '+f+"

";return e}function simcoreui_signal_dialog(a){update_signal_dialog(a);$(".popover_hw").popover("hide")}function simcoreui_init_hw_signals(n,f){var h="";var d="";var m="";var g="";var k='';for(var p in n.signals){d=n.signals[p].value;m=n.signals[p].default_value;d="0x"+d.toString(16);m="0x"+m.toString(16);if(d!=m){h="font-weight-bold"}else{h="font-weight-normal"}g="name: "+n.signals[p].name+"
value: "+d+"
default_value: "+m+"
nbits: "+n.signals[p].nbits+"
type: "+n.signals[p].type+"
visible: "+n.signals[p].visible+"
";k=k+''+p+"";if(true==f){$("#hw_signal_strong_"+p).attr("class",h);$("#hw_signal_tt_"+p).attr("data-content",g)}}k=k+"
";var a='
Signals Dependencies
Loading...

'+k+"

";return a}function simcoreui_init_hw_states(p,g){var k="";var f="";var n="";var a="";var s="";var h="";var m='';for(var q in p.states){f="-";n="-";if(typeof p.states[q].value!="undefined"){f=p.states[q].value;n=p.states[q].default_value;if(typeof f=="object"){f="object";n="object"}else{if(typeof f=="function"){f=f()}f="0x"+f.toString(16);n="0x"+n.toString(16)}}if(f!=n){k="font-weight-bold"}else{k="font-weight-normal"}if(typeof p.states[q].nbits!="undefined"){a=p.states[q].nbits}else{a="-"}if(typeof p.states[q].visible!="undefined"){s=p.states[q].visible}else{s="-"}h="name: "+q+"
value: "+f+"
default_value: "+n+"
nbits: "+a+"
visible: "+s+"
";m=m+''+q+"";if(true==g){$("#hw_state_strong_"+q).attr("class",k);$("#hw_state_tt_"+q).attr("data-content",h)}}m=m+"
";var d='
States Control States
Program Counter (PC) → '+p.ctrl_states.pc.state+"
Instruction Register (IR) → "+p.ctrl_states.ir.state+"
Stack Pointer (SP) → "+p.ctrl_states.sp.state+'

'+m+"

";return d}function simcoreui_init_hw_behaviors(d){var f='';for(var a in d.behaviors){f=f+' nparameters: "+d.behaviors[a].nparameters+"
\">"+a+"
"}f=f+"";var e='
Behaviors

'+f+"

";return e}function simcoreui_init_hw(a){var d=simhw_active();var e="";e+=simcoreui_init_hw_summary(d);e+=simcoreui_init_hw_signals(d,false);e+=simcoreui_init_hw_states(d,false);e+=simcoreui_init_hw_behaviors(d);$(a).html(e);$('[data-toggle="tooltip"]').tooltip({trigger:"hover",sanitizeFn:function(f){return f}});$(".popover_hw").popover({trigger:"hover click",container:"body",placement:"auto",template:'',sanitizeFn:function(f){return f}});return true}function simcoreui_show_hw(){var a=simhw_active();simcoreui_init_hw_signals(a,true);simcoreui_init_hw_states(a,true);return true}function simcoreui_voice_canSpeak(){if(typeof window.speechSynthesis=="undefined"){return false}if(false==get_cfg("use_voice")){return false}return true}function simcoreui_voice_speak(d){var a=null;if(simcoreui_voice_canSpeak()){a=new SpeechSynthesisUtterance(d);a.lang="es-ES";if("en"==get_cfg("ws_idiom")){a.lang="en-US"}if("es"==get_cfg("ws_idiom")){a.lang="es-EN"}window.speechSynthesis.speak(a)}}function simcoreui_voice_stopSpeak(){if(simcoreui_voice_canSpeak()){window.speechSynthesis.cancel()}}function get_verbal_from_current_mpc(){var a="";var g="";var d=simhw_sim_ctrlStates_get().mpc.state;var f=get_value(simhw_sim_state(d));var h=simhw_internalState_get("MC",f);for(var e in h){if("MADDR"===e){g=g+"MADDR is "+h[e]+". ";continue}a=a+e+" ";g=g+compute_signal_verbals(e,h[e])}a=a.trim();if(a===""){a=""}if(g.trim()===""){g=""}return"Activated signals are: "+a+". Associated actions are: "+g}function get_verbal_from_current_pc(){var a=simhw_sim_ctrlStates_get().pc.state;var f=get_value(simhw_sim_state(a));var d=parseInt(f)-4;var e=get_deco_from_pc(d);if(""==e.trim()){e="not jet defined"}return"Current instruction is: "+e+" and PC points to "+show_value(d)+". "}function request_html_url(a){var d=null;if(false==is_mobile()){if(navigator.onLine){d=fetch(a)}else{d=caches.match(a).then()}}else{d=$.ajax(a,{type:"GET",dataType:"html"})}return d}function update_div_frompartialhtml(a,e,f){var d="
Sorry, No more details available for this element.

\n";if(""==f){$(a).html(d)}else{$(a).html(f)}if((""==f)||(""==e)){return}var g=$(a).filter(e).html();if(typeof g=="undefined"){g=$(a).find(e).html()}if(typeof g=="undefined"){g=d}$(a).html(g)}function resolve_html_url(a,e,d,f){return request_html_url(e).then(function(g){if(typeof g=="object"){g.text().then(function(h){update_div_frompartialhtml(a,d,h);f()})}else{update_div_frompartialhtml(a,d,g);f()}})}function update_signal_loadhelp(d,g,f){var a=get_cfg("ws_idiom");var e="examples/hardware/"+g+"/help/signals-"+a+".html";resolve_html_url(d,e,"#"+f,function(){$(d).trigger("create")});ga("send","event","help","help.signal","help.signal."+g+"."+f)}function update_checker_loadhelp(d,f){var a=get_cfg("ws_idiom");var e="help/simulator-"+a+".html";resolve_html_url(d,e,"#"+f,function(){$(d).trigger("create")});ga("send","event","help","help.checker","help.checker."+f)}function simcoreui_do_notify(k,m,a,d){var f=$("#alerts-container");if(f.length==0){f=$('

');$("body").append(f)}var e=$('
',message:'',value:simhw_sim_signal(s).value,animate:false,size:"large",buttons:{description:{label:'± Description',className:"btn-outline-dark btn-sm col-xs-3 col-sm-3 col-lg-2 mr-auto",callback:function(){$(".bh-all").collapse("toggle");return false}},success:{label:"Save",className:"btn-primary btn-sm col-xs-3 col-sm-2 float-right",callback:function(){s=$("#ask_skey").val();user_input=$("input[name='ask_svalue']:checked").val();if(typeof user_input=="undefined"){user_input=$("input[name='ask_svalue']").val()}simhw_sim_signal(s).value=user_input;propage_signal_update(s)}},close:{label:"Close",className:"btn-danger btn-sm col-xs-3 col-sm-2 float-right",callback:function(){}}}});h.find(".modal-title").addClass("mx-auto");h.find(".bootbox-close-button").addClass("mx-1");$(".dial").knob({min:0,max:(m-1)}).val(simhw_sim_signal(s).value).trigger("change");show_states();show_rf_values()}function update_signal_quick(d){var f=simhw_short_name();if(""==f){f="ep"}var e=Math.pow(2,simhw_sim_signal(d).nbits);var a=simhw_sim_signal(d).value;a=(a+1)%e;simhw_sim_signal(d).value=a;propage_signal_update(d);show_states();show_rf_values()}function propage_signal_update(f){if(true===get_cfg("is_interactive")){if(simhw_sim_signal(f).value!=simhw_sim_signal(f).default_value){simhw_sim_state("REG_MICROINS").value[f]=simhw_sim_signal(f).value}else{delete (simhw_sim_state("REG_MICROINS").value[f])}var d=simhw_sim_ctrlStates_get().mpc.state;var e=get_value(simhw_sim_state(d));if(typeof simhw_internalState_get("MC",e)=="undefined"){simhw_internalState_set("MC",e,new Object());simhw_internalState_set("MC_dashboard",e,new Object())}simhw_internalState_get("MC",e)[f]=simhw_sim_signal(f).value;simhw_internalState_get("MC_dashboard",e)[f]={comment:"",breakpoint:false,state:false,notify:new Array()};update_signal_firmware(f);var a=get_simware();document.getElementById("inputFirmware").value=saveFirmware(a)}compute_behavior("FIRE "+f)}function update_memories(v){set_simware(v);var g=get_simware();simhw_internalState_reset("MC",{});simhw_internalState_reset("MC_dashboard",{});for(var t=0;t1);n=(d.trim().split("break:").length>1);p=d.trim().split("notify:");for(var o=0;o1){for(f=0;f1){for(f=0;f>23)&255)-127;var d=1+((e&8388607)/8388608);var f=a*d*Math.pow(2,g);if(-127===g){if(1===d){f=(a===1)?"+0":"-0"}else{f=a*((e&8388607)/8388607)*Math.pow(2,-126)}}if(128===g){if(1===d){f=(a===1)?"+Inf":"-Inf"}else{f="NaN"}}return f}function hex2char8(a){var d=[];d[0]=String.fromCharCode((a&4278190080)>>24);d[1]=String.fromCharCode((a&16711680)>>16);d[2]=String.fromCharCode((a&65280)>>8);d[3]=String.fromCharCode((a&255)>>0);return d}function pack5(a){return"00000".substring(0,5-a.length)+a}function pack8(a){return"00000000".substring(0,8-a.length)+a}function pack32(a){return"00000000000000000000000000000000".substring(0,32-a.length)+a}function hex2bin(a){var d=a.toString(2);d=pack32(d);d=d.substring(0,4)+" "+d.substring(4,8)+" "+d.substring(8,12)+" "+d.substring(12,16)+"
"+d.substring(16,20)+" "+d.substring(20,24)+" "+d.substring(24,28)+" "+d.substring(28,32);return d}function init_cpu(d){if(d===""){simhw_sim_state("CLK").value=ko_observable(simhw_sim_state("CLK").value);simhw_sim_state("DECO_INS").value=ko_observable(simhw_sim_state("DECO_INS").value);return}var a="
Instructions
 
CLK ticks
 
";$(d).html("
"+a+"
");ko_rebind_state("CLK","clk_context");ko_rebind_state("DECO_INS","ins_context")}function init_config_mp(e){if(e===""){simhw_internalState_reset("MP_wc",ko_observable(0));return}var d="
";d+="
Wait cycles (0 - ∞)
";$(e).html(d);simhw_internalState_reset("MP_wc",ko_observable(0));var a=document.getElementById("mp_wc");ko.applyBindings(simhw_internalState("MP_wc"),a)}function get_deco_from_pc(a){var e="0x"+a.toString(16);var d=simhw_internalState("FIRMWARE");if((typeof d.assembly==="undefined")||(typeof d.assembly[e]==="undefined")||(typeof d.assembly[e].source==="undefined")){return""}return d.assembly[e].source}function show_visgraph(o,q){var t={};var n={};var h=[];var k=0;for(t in simhw_sim_signals()){n[t]=k;h.push({id:k,label:t,title:t});k++}for(var e=0;e=g[".ktext"].begin)){return e}if((f=g[".text"].begin)){return e}e.ok=false;e.msg="The program has finished because the PC register points outside .ktext/.text code segments";return e}function simcore_reset(){var g={};g.msg="";g.ok=true;var k=get_simware();var e=simhw_internalState("FIRMWARE");var a=simhw_internalState("segments");var h=simhw_sim_components();var o=simhw_sim_ctrlStates_get().pc.state;var n=simhw_sim_state(o);var m=e.stackRegister;var d=simhw_sim_states().BR[m];for(var p in h){switch(h[p].name){case"CPU":compute_general_behavior("RESET");if((typeof a[".ktext"]!=="undefined")&&(k.labels2.kmain)){set_value(n,parseInt(k.labels2.kmain));show_asmdbg_pc()}else{if((typeof a[".text"]!=="undefined")&&(k.labels2.main)){set_value(n,parseInt(k.labels2.main));show_asmdbg_pc()}}if((typeof a[".stack"]!=="undefined")&&(typeof d!=="undefined")){set_value(d,parseInt(a[".stack"].begin))}break;case"MEMORY":compute_general_behavior("MEM_RESET");break;case"SCREEN":compute_general_behavior("SCR_RESET");break;case"KBD":compute_general_behavior("KBD_RESET");break;case"IO":compute_general_behavior("IO_RESET");break;default:break}}var f=get_cfg("ws_mode");if("wepmips"!=f){compute_general_behavior("CLOCK")}for(p in h){switch(h[p].name){case"CPU":show_states();show_rf_values();show_rf_names();show_dbg_ir(get_value(simhw_sim_state("REG_IR_DECO")));show_control_memory(simhw_internalState("MC"),simhw_internalState("MC_dashboard"),0,true);break;case"MEMORY":show_main_memory(simhw_internalState("MP"),0,true,false);break;case"SCREEN":set_screen_content("");break;default:break}}return g}function simcore_execute_microinstruction(){var a=simcore_check_if_can_continue();if(false==a.ok){return a}compute_general_behavior("CLOCK");show_states();show_rf_values();show_dbg_mpc();return a}function simcore_execute_microprogram(q){var g=simcore_check_if_can_continue();if(false==g.ok){return g}var f=get_cfg("ws_mode");if("wepmips"==f){compute_general_behavior("CLOCK");compute_general_behavior("CLOCK");show_states();show_rf_values();return g}var m=false;if(q.cycles_limit<0){m=true}var o=null;var h=null;var e="";var p=simhw_internalState("MC");var n=simhw_sim_ctrlStates_get().mpc.state;var k=simhw_sim_state(n);var d=0;var a=0;do{if(3==q.verbosity){o=simcore_simstate_current2state()}else{if(4==q.verbosity){e="0x"+a.toString(16);g.msg=g.msg+"Micropc at "+e+".\t"+get_verbal_from_current_mpc()+"\n"}}compute_general_behavior("CLOCK");if(3==q.verbosity){h=simcore_simstate_current2state();e="0x"+a.toString(16);g.msg=g.msg+"micropc("+e+"):\t"+controlmemory_lineToString(p,a).trim()+":\t\t\t"+simcore_simstate_diff_states(o,h)+"\n"}d++;if(m){q.cycles_limit=d+1}if(d>=q.cycles_limit){g.msg="Warning: clock cycles limit reached in a single instruction.";g.ok=false;break}a=get_value(k);if(typeof p[a]=="undefined"){g.msg="Error: undefined microinstruction at "+a+".";g.ok=false;break}}while((d=n))||((k=t)))){if(2==w.verbosity){o=simcore_simstate_current2state()}m=simcore_execute_microprogram(w);if(false==m.ok){return m}if(2==w.verbosity){h=simcore_simstate_current2state();e="0x"+k.toString(16);f.msg=f.msg+"pc("+e+"):\t"+g.assembly[e].source_original+":\t\t\t"+simcore_simstate_diff_states(o,h)+"\n"}else{if(3==w.verbosity){f.msg=f.msg+m.msg}else{if(4==w.verbosity){f.msg=f.msg+m.msg}}}v++;if(v>w.instruction_limit){f.ok=false;f.msg="more than "+w.instruction_limit+" instructions executed before application ends.";return f}u=k;k=get_value(q)}return f}function simcore_compile_firmware(g){var d={};d.msg="";d.ok=true;if(""==g){d.msg="Empty Firmware";d.ok=false;return d}var a=null;try{a=loadFirmware(g);d.simware=a}catch(f){d.msg="ERROR: at line: "+f.lineNumber+" and column: "+f.columnNumber;d.ok=false;return d}if(a.error!=null){d.msg=a.error;d.ok=false;return d}update_memories(a);simcore_reset();return d}function simcore_compile_assembly(d){var e={};e.msg="";e.ok=true;var a=get_simware();if(a.firmware.length==0){e.msg="Empty microcode, please load the microcode first.";e.ok=false;return e}var f=simlang_compile(d,a);e.simware=f;if(f.error!=null){e.msg=f.error;e.ok=false;return e}set_simware(f);update_memories(a);simcore_reset();return e}function simcore_hardware_export(a){var d={};d.msg="{}";d.ok=false;var e=simhw_getObjByName(a);if(null===e){return d}d.ok=true;d.msg=JSON.stringify(e,function(f,g){if(typeof g==="function"){return"/Function("+g.toString()+")/"}return g});return d}function simcore_hardware_import(hw_json){var ret={};ret.msg="";ret.ok=true;hw_obj=JSON.parse(hw_json,function(key,value){if(typeof value==="string"&&value.startsWith("/Function(")&&value.endsWith(")/")){value=value.substring(10,value.length-2);return eval("("+value+")")}return value});simhw_add(hw_obj);return ret}function simcore_native_get_signal(a){return(get_value(simhw_sim_signal(a))>>>0)}function simcore_native_set_signal(a,d){set_value(simhw_sim_signal(a),d);compute_behavior("FIRE "+a);return d}function simcore_native_get_value(f,a){var e=0;if(("CPU"===f)||("BR"===f)){if(Number.isInteger(a)){e=a}else{e=parseInt(a)}if(isNaN(e)){return(get_value(simhw_sim_state(a))>>>0)}return(get_value(simhw_sim_states().BR[e])>>>0)}if("MEMORY"===f){return(simhw_internalState_get("MP",a)>>>0)}if("DEVICE"===f){var g=simhw_internalState_get("io_hash",a);var h=(get_value(simhw_sim_state(g))>>>0);set_value(simhw_sim_state("BUS_AB"),a);set_value(simhw_sim_signal("IOR"),1);compute_behavior("FIRE IOR");h=get_value(simhw_sim_state("BUS_DB"));return h}if("SCREEN"===f){var d=get_screen_content();return d}return false}function simcore_native_set_value(f,d,h){var e=0;var a=simhw_sim_ctrlStates_get().pc.state;if(("CPU"===f)||("BR"===f)){if(Number.isInteger(d)){e=d}else{e=parseInt(d)}if(isNaN(e)){set_value(simhw_sim_state(d),h);if(a===d){show_asmdbg_pc()}return h}return set_value(simhw_sim_states().BR[e],h)}if("MEMORY"===f){simhw_internalState_set("MP",d,h);return h}if("DEVICE"===f){var g=simhw_internalState_get("io_hash",d);set_value(simhw_sim_state(g),h);set_value(simhw_sim_state("BUS_AB"),d);set_value(simhw_sim_state("BUS_DB"),h);set_value(simhw_sim_signal("IOW"),1);compute_behavior("FIRE IOW");return h}if("SCREEN"===f){set_screen_content(h);return h}return false}function simcore_native_get_fields(d){var a=get_simware();for(var e in a.firmware){if(a.firmware[e].signatureRaw===d){return a.firmware[e].fields}}}function simcore_native_get_field_from_ir(a,d){if(typeof a[d]==="undefined"){return false}var f=get_value(simhw_sim_state("REG_IR"));var g=(31-parseInt(a[d].startbit));var e=parseInt(a[d].stopbit);f=f<>>g;f=f>>>e;return f}function simcore_native_deco(){compute_behavior("DECO")}function simcore_native_go_maddr(a){set_value(simhw_sim_state("MUXA_MICROADDR"),a)}function simcore_native_go_opcode(){var a=get_value(simhw_sim_state("ROM_MUXA"));set_value(simhw_sim_state("MUXA_MICROADDR"),a)}function simcore_native_go_instruction(d){var a=get_simware();for(var f in a.firmware){if(a.firmware[f].signatureRaw===d){var e=a.firmware[f]["mc-start"];set_value(simhw_sim_state("MUXA_MICROADDR"),e);return}}}function simcore_simstate_checklist2state(k){var d={};var h=false;k=k.replace(/;|==|!=|>=|<=|=|>|"===h[e][a].op){m.fulfill=(parseInt(m.obtained)>parseInt(m.expected))}else{if("<"===h[e][a].op){m.fulfill=(parseInt(m.obtained)="===h[e][a].op){m.fulfill=(parseInt(m.obtained)>=parseInt(m.expected))}else{if("<="===h[e][a].op){m.fulfill=(parseInt(m.obtained)<=parseInt(m.expected))}else{if("=="===h[e][a].op){m.fulfill=(m.expected==m.obtained)}else{if("!="===h[e][a].op){m.fulfill=(m.expected!=m.obtained)}}}}}}}n.result.push(m);if(m.fulfill===false){n.errors++}}}if((k)&&(typeof g[e]!="undefined")){for(a in g[e]){n.neltos_obtained++;if((typeof h[e]!="undefined")&&(typeof h[e][a]!="undefined")){continue}m={};m.expected=g[e][a].default_value;m.obtained=g[e][a].value;m.fulfill=(m.expected===m.obtained);m.elto_type=e.toLowerCase();m.elto_id=g[e][a].id;m.elto_op="=";n.result.push(m);if(m.fulfill===false){n.errors++}}}}return n}function simcore_simstate_diff_results(d,a){return simcore_simstate_check_results(d,a,true)}function simcore_simstate_diff_states(d,f){var a=simcore_simstate_state2checklist(d).split(";");var e=simcore_simstate_state2checklist(f).split(";");return e.filter(function(g){return !a.includes(g)}).join(";").trim()}function simcore_simstate_checkreport2txt(d){var e="";for(var a=0;aTypeIdentificationId.Values in the clipboard stateValues in the selected state";for(var e=0;e"+f[e].elto_type+""+f[e].elto_id+""+f[e].elto_op+" "+f[e].expected+""+f[e].obtained+""}g+="";return g}var breakpoint_icon_list=[{type:"classic",shortname:"classic",origin:"https://www.optikunde.de/farbe/rot.php"},{type:"classic",shortname:"pushpin",origin:"http://clipart-library.com/red-push-pin.html"},{type:"pets",shortname:"cat1",origin:""},{type:"pets",shortname:"dog1",origin:""},{type:"films",shortname:"super",origin:"https://worldvectorlogo.com/logo/superman-3"},{type:"films",shortname:"batman",origin:"http://getwallpapers.com/collection/black-and-white-batman-wallpaper"},{type:"films",shortname:"r2d2",origin:"https://imgur.com/gallery/gKSmy"},{type:"films",shortname:"sw",origin:"https://i2.wp.com/icons.iconarchive.com/icons/sensibleworld/starwars/1024/Death-Star-icon.png"},{type:"films",shortname:"bb8",origin:""},{type:"films",shortname:"vader1",origin:""},{type:"films",shortname:"grail",origin:"http://3png.com/a-31243892.html"},{type:"films",shortname:"despicable",origin:"https://www.helloforos.com/t/cerrado/350821/81"},{type:"films",shortname:"lotr4",origin:"http://www.cinecollectibles.com/gentle-giant-c-1_62.html"},{type:"films",shortname:"lotr2",origin:"https://www.forbes.com/sites/adrianbridgwater/2016/01/15/microsoft-r-one-big-data-tool-to-rule-them-all/"},{type:"films",shortname:"hp1",origin:"http://www.logosclicks.com/logos/harry-potter-name-logo-46a93c.html"}];function sim_core_breakpointicon_get(a){return"stop icon"}function hex2values_update(a){var e=parseInt($("#popover1")[0].value);var d=simhw_internalState("filter_states");if(typeof simhw_sim_states()["BR"][a]!="undefined"){set_value(simhw_sim_states()["BR"][a],e);fullshow_rf_values();$("#rf"+a).click();$("#rf"+a).click()}if(typeof simhw_sim_states()[a]!="undefined"){if(1==simhw_sim_states()[a].nbits){e=e%2}set_value(simhw_sim_states()[a],e);fullshow_eltos(simhw_sim_states(),d);$("#rp"+a).click();$("#rp"+a).click()}}function hex2values(p,n){var m=/[0-9A-F]{1,8}/gi;if(!m.test(p)){p=0}var g=p>>0;var o=p>>>0;var a=hex2char8(o);var k=hex2float(o);var e=hex2bin(o);var h=o.toString(16).toUpperCase();h="0x"+pack8(h);var d="";if(get_cfg("is_editable")==true){d=" update"}var f=""+d+"
hex. "+h+"
binary "+e+"
signed "+g+"
unsig. "+o+"
char  "+a[0]+"   "+a[1]+"   "+a[2]+"   "+a[3]+"  
float "+k+"
";return f}function init_rf(f){if(f==""){return}var a="";var e="";for(var d=0;d"+e+" "+(get_value(simhw_sim_states()["BR"][d])>>>0).toString(get_cfg("RF_display_format")).toUpperCase()+""}$(f).html("
"+a+"
");$("[data-toggle=popover-up]").popover({html:true,placement:"auto",animation:false,trigger:"click",template:'',container:"body",content:function(){var h=$(this).attr("data-popover-content");var g=get_value(simhw_sim_states()["BR"][h]);return hex2values(g,h)},title:function(){var g=$(this).attr("data-popover-content");var h=""#rf"+g+""";return'R'+g+''},sanitizeFn:function(g){return g}})}function fullshow_rf_values(){if(typeof document=="undefined"){return}var d=get_simware();for(var e=0;e>>0).toString(get_cfg("RF_display_format")).toUpperCase();if(16==get_cfg("RF_display_format")){a=pack8(a)}$("#tbl_RF"+e).html(a)}}var show_rf_values_deferred=null;function innershow_rf_values(){fullshow_rf_values();show_rf_values_deferred=null}function show_rf_values(){if(null!=show_rf_values_deferred){return}show_rf_values_deferred=setTimeout(innershow_rf_values,cfg_show_rf_delay)}function show_rf_names(){if(typeof document=="undefined"){return}var d=get_simware();var a="";for(var e=0;e1){e=g.substring(0,3);d=g.substring(3,g.length);if(g.length<3){g=''+e+" "}else{g=''+e+""}if(d.length>0){g+=''+d+""}}var m=a[k].split(",")[1];f+=""}$(h).html("
"+f+"
");$("[data-toggle=popover-bottom]").popover({html:true,placement:"bottom",animation:false,content:function(){var q=$(this).attr("data-popover-content");var p=get_value(simhw_sim_states()[q]);return hex2values(p,q)},title:function(){var p=$(this).attr("data-popover-content");var q=""#rp"+p+""";return''+simhw_sim_states()[p].name+''},sanitizeFn:function(p){return p}})}function fullshow_eltos(k,e){if(typeof document=="undefined"){return}for(var d=0;d1){g=(simhw_sim_state(a).value>>>0).toString(get_cfg("RF_display_format")).toUpperCase();if(16==get_cfg("RF_display_format")){g=pack8(g)}}var h=document.getElementById("tbl_"+a);if(h!=null){h.innerHTML=g}}}var show_eltos_deferred=null;function show_eltos(d,a){if(null!=show_eltos_deferred){return}show_eltos_deferred=setTimeout(function(){fullshow_eltos(d,a);show_eltos_deferred=null},cfg_show_eltos_delay)}function init_states(d){var a=simhw_internalState("filter_states");return init_eltos(d,simhw_sim_states(),a)}function show_states(){var a=simhw_internalState("filter_states");return show_eltos(simhw_sim_states(),a)}function ko_observable(a){if(typeof ko!="undefined"){return ko.observable(a).extend({rateLimit:cfg_show_rf_refresh_delay})}else{return a}}function ko_rebind_state(e,f){if(typeof ko=="undefined"){return}var d=simhw_sim_state(e);if(typeof d.value!="function"){d.value=ko.observable(d.value).extend({rateLimit:cfg_show_rf_refresh_delay})}var a=document.getElementById(f);ko.cleanNode(a);ko.applyBindings(simhw_sim_state(e),a)}var screen_content="";var keyboard_content="";function get_screen_content(){var a=null;if(typeof document!="undefined"){a=document.getElementById("kdb_con")}if(a!=null){screen_content=a.value}return screen_content}function set_screen_content(a){screen_content=a;if(typeof document=="undefined"){return}var d=null;if(typeof document!="undefined"){d=document.getElementById("kdb_con")}if(d!=null){d.value=a}}function get_keyboard_content(){if(typeof document=="undefined"){var a=require("readline-sync");var e=a.question("keyboard> ");keyboard_content=e.toString();return keyboard_content}var d=null;if(typeof document!="undefined"){d=document.getElementById("kdb_key")}if(d!=null){keyboard_content=d.value}return keyboard_content}function set_keyboard_content(d){keyboard_content=d;var a=null;if(typeof document!="undefined"){a=document.getElementById("kdb_key")}if(a!=null){a.value=d}}var show_main_memory_deferred=null;var show_main_memory_redraw=false;function show_main_memory(f,a,e,d){if(get_cfg("DBG_delay")>3){show_main_memory_redraw=e||show_main_memory_redraw}if(null!=show_main_memory_deferred){return}show_main_memory_redraw=e;show_main_memory_deferred=setTimeout(function(){if(show_main_memory_redraw==false){light_refresh_main_memory(f,a,d)}else{hard_refresh_main_memory(f,a,d)}show_main_memory_deferred=null;show_main_memory_updates=false},cfg_show_main_memory_delay)}function hard_refresh_main_memory(g,n,u){if(typeof document=="undefined"){return}var f="";var s="";var e="";var o="";var h=new Array();var p=get_simware();var q=new Object();for(var t in p.labels2){q[p.labels2[t]]=t}var d=new Object();var a=simhw_internalState("segments");for(skey in a){d[parseInt(a[skey].begin)]=skey}for(var t in g){s=main_memory_getword(q,h,g,t);e=d[parseInt(t)];if(typeof e!="undefined"){f+='
'+e+"
"}o="0x"+pack5(h[3])+' - 0x'+pack5(h[0]);if(t==n){f+="
"+o+"
"+s+"
"}else{f+="
"+o+"
"+s+"
"}}if(typeof g[n]=="undefined"){f+="
0x"+parseInt(n).toString(16)+"
00 00 00 00
"}$("#memory_MP").html("
"+f+"
");var m=$("#addr"+n);if((u)&&(m.length>0)){var k=m[0].offsetTop;var m=$("#memory_MP");if(m.length>0){m[0].scrollTop=k-100}}old_main_addr=n}function main_memory_getword(g,a,h,e){if(typeof h[e]=="undefined"){return"00 00 00 00"}var f=h[e].toString(16);f=pack8(f);var d=0;for(d=0;d<4;d++){a[d]=(parseInt(e)+d).toString(16)}value2="";for(d=0;d<4;d++){labeli=g["0x"+a[3-d]];valuei=f[d*2]+f[d*2+1];if(typeof labeli!="undefined"){value2+=''+valuei+''+labeli+""}else{value2+=valuei+" "}}return value2}var old_main_addr=0;function light_refresh_main_memory(m,e,k){if(k){var d=new Array();var a=get_simware();var h=new Object();for(var g in a.labels2){h[a.labels2[g]]=g}var f=main_memory_getword(h,d,m,e);o1=$("#mpval"+e);o1.html(f)}o1=$("#addr"+old_main_addr);o1.css("color","black");o1.css("font-weight","normal");old_main_addr=e;o1=$("#addr"+old_main_addr);o1.css("color","blue");o1.css("font-weight","bold")}var show_control_memory_deferred=null;function show_control_memory(f,a,d,e){if(null!=show_control_memory_deferred){return}show_control_memory_deferred=setTimeout(function(){if(false==e){light_refresh_control_memory(f,a,d)}else{hard_refresh_control_memory(f,a,d,e)}show_control_memory_deferred=null},cfg_show_control_memory_delay)}function controlmemory_lineToString(f,a){var d="";for(var e in f[a]){if(1==f[a][e]){d+=e+" ";continue}if("NATIVE"==e){d+="<native> ";continue}if("NATIVE_JIT"==e){d+="<built-in> ";continue}d+=e+"="+parseInt(f[a][e]).toString(2)+" "}return d}function hard_refresh_control_memory(n,h,q,w){if(typeof document=="undefined"){return}var g="";var u="";var d=get_cfg("ICON_theme");var s=get_simware();var t=new Object();for(var v in s.firmware){t[s.firmware[v]["mc-start"]]=s.firmware[v]["name"]}var f="";var e="";var k="";var a=0;for(var v in n){u=controlmemory_lineToString(n,v);f="0x"+parseInt(v).toString(16);if(typeof t[v]!="undefined"){k=t[v];a=5-k.length;if(a>0){for(var m=0;m'+k+''+f+"
"}e=" ";if(true==h[v].breakpoint){e=sim_core_breakpointicon_get(d)}if(v==q){g+=""+f+""+e+""+u+""}else{g+=""+f+""+e+""+u+""}}if(typeof n[q]=="undefined"){g+="0x"+parseInt(q).toString(16)+" "}$("#memory_MC").html("
"+g+"
");var p=$("#maddr"+q);if((w)&&(p.length>0)){var o=p[0].offsetTop;var p=$("#memory_MC");if(p.length>0){p[0].scrollTop=o}}old_mc_addr=q}var old_mc_addr=0;function light_refresh_control_memory(e,a,d){o1=$("#maddr"+old_mc_addr);o1.css("color","black");o1.css("font-weight","normal");old_mc_addr=d;o1=$("#maddr"+old_mc_addr);o1.css("color","blue");o1.css("font-weight","bold")}function firmware2html(A,C){var p=simhw_internalState("filter_signals");var E="coµdir  ";var B=1;for(var D=0;D"+simhw_sim_signals()[t].name+"";B++}E+="";var x="
";x+="";var y=0;var n="";var m="";var G="";for(var D=0;D"+u+" "}else{n+=""}if(C){G="0x"+(w+j).toString(16)}else{G=w+j}n+="";var g=f[j];for(var z=0;z"+e+""+a}if(q){n+=""}else{n+=""}}x+=""+n+""}}x+="
"+m+"  "+G+" "+F+""+F+"
";return x}function labels2html_aux(a,h){var g="";var e="";for(var d=3;d>=0;d--){e="0x"+(parseInt(h)+d).toString(16);if(typeof a[e]!="undefined"){for(var f=0;f"+a[e][f]+"
"}}else{g=g+" "}}return g}function mp2html(d,m,h){var g=new Object();for(var e in m){if(typeof g[m[e]]=="undefined"){g[m[e]]=new Array()}g[m[e]].push(e)}var a="";a+="
";var f="white";for(var p in h){c_begin=parseInt(h[p].begin);c_end=parseInt(h[p].end);f=h[p].color;rows=0;var n="";for(var k=c_begin;k"}rows++}if(0==rows){a+="";rows=2}a+=rows+" align=right>"+h[p].name+" "+n;if(h[p].name!=".stack"){a+=""}}a+="
labelsaddress
byte 3 byte 2 byte 1 byte 0
 31  ......  24   23  ......  16   15  ......  8   7  ......  0 
  segment
"+labels2html_aux(g,c)+""+c.toUpperCase()+""+d[c].substr(0,8)+" "+d[c].substr(8,8)+" "+d[c].substr(16,8)+" "+d[c].substr(24,8)+""+labels2html_aux(g,c)+""+c.toUpperCase()+""+d[c].substr(0,8)+" "+d[c].substr(8,8)+" "+d[c].substr(16,8)+" "+d[c].substr(24,8)+"
 0x"+parseInt(h[p].begin).toString(16).toUpperCase()+"  0x"+parseInt(h[p].end).toString(16).toUpperCase()+"  
 ...... 

";return a}function segments2html(d){var f="
";f+="
";for(var a in d){if(d[a].name!=".stack"){f+=""}}f+="
"+d[a].name+"
...
"+d[".stack"].name+"
  ";var g="";var e="";for(a in d){g="";if(d[a].name!=".stack"){f+=g+""}else{e=g}}f+=e+"
"+d[a].begin+"
"+d[a].end+"
...
";return f}function assembly2html(e,n,k,h){var f="";var s="";var p="";var g="";var d="#F0F0F0";var a="";var t=new Object();for(l in n){if(typeof t[n[l]]=="undefined"){t[n[l]]=new Array()}t[n[l]].push(l)}var q=new Object();for(l in k){laddr="0x"+k[l].begin.toString(16);q[laddr]=l}a+="
";for(l in h){if(d=="#F0F0F0"){d="#F8F8F8"}else{d="#F0F0F0"}h[l].bgcolor=d;s=h[l].source;p=h[l].source_original;g=parseInt(h[l].binary,2).toString(16);g="0x"+"00000000".substring(0,8-g.length)+g;f="";if(typeof t[l]!="undefined"){for(var m=0;m"+t[l][m]+""}}if(s==""){p=''+p+""}else{if(s!=p){s=''+s+"";p=''+p+""}}if(typeof q[l]!="undefined"){a+="";""}a+=""}a+="
"+q[l]+"
"+f+""+l+""+g+""+s+""+p+"
";return a}var show_asmdbg_pc_deferred=null;function innershow_asmdbg_pc(){fullshow_asmdbg_pc();show_asmdbg_pc_deferred=null}function show_asmdbg_pc(){if(get_cfg("DBG_delay")>5){return fullshow_asmdbg_pc()}if(null==show_asmdbg_pc_deferred){show_asmdbg_pc_deferred=setTimeout(innershow_asmdbg_pc,cfg_show_asmdbg_pc_delay)}}var old_addr=0;function fullshow_asmdbg_pc(){if(typeof document=="undefined"){return}var f=null;var a=simhw_sim_ctrlStates_get().pc.state;var e=get_value(simhw_sim_state(a));var g="0x"+e.toString(16);var d=simhw_internalState("FIRMWARE");if(typeof d.assembly[old_addr]!="undefined"){f=$("#asmdbg"+old_addr);f.css("background-color",d.assembly[old_addr].bgcolor)}else{for(l in d.assembly){f=$("#asmdbg"+l);f.css("background-color",d.assembly[l].bgcolor)}}old_addr=g;f=$("#asmdbg"+g);f.css("background-color","#00EE88");return f}function asmdbg_set_breakpoint(h){var d=get_cfg("ICON_theme");var a="0x"+h.toString(16);var e=simhw_internalState("FIRMWARE");var g=document.getElementById("bp"+a);var f=e.assembly[a].breakpoint;if(f===true){f=false;g.innerHTML=" "}else{f=true;g.innerHTML=sim_core_breakpointicon_get(d)}e.assembly[a].breakpoint=f;simcore_record_append_new("Set assembly breakpoint at "+h,"asmdbg_set_breakpoint("+h+");\n")}function dbg_set_breakpoint(g){var a=get_cfg("ICON_theme");var d=get_cfg("DBG_level");var f=document.getElementById("mcpin"+g);var e=simhw_internalState_get("MC_dashboard",g).breakpoint;if(e===true){e=false;f.innerHTML=" "}else{e=true;f.innerHTML=sim_core_breakpointicon_get(a)}simhw_internalState_get("MC_dashboard",g).breakpoint=e;if(e&&("instruction"===d)){simcoreui_notify("INFO","Please remember to change configuration to execute at microinstruction level.","success",get_cfg("NOTIF_delay"))}simcore_record_append_new("Set firmware breakpoint at "+g,"dbg_set_breakpoint("+g+");\n")}function show_dbg_mpc(){var a=simhw_sim_ctrlStates_get().mpc.state;var d=get_value(simhw_sim_state(a));show_control_memory(simhw_internalState("MC"),simhw_internalState("MC_dashboard"),d,false)}var show_dbg_ir_deferred=null;function show_dbg_ir(a){if(null!=show_dbg_ir_deferred){return}show_dbg_ir_deferred=setTimeout(function(){fullshow_dbg_ir(a);show_dbg_ir_deferred=null},cfg_show_dbg_ir_delay)}function fullshow_dbg_ir(a){if(typeof document=="undefined"){return}var d=document.getElementById("svg_p");if(d!=null){d=d.contentDocument}if(d!=null){d=d.getElementById("tspan3899")}if(d!=null){d.innerHTML=a}var d=document.getElementById("svg_cu");if(d!=null){d=d.contentDocument}if(d!=null){d=d.getElementById("text3611")}if(d!=null){d.innerHTML=a}}function init_io(g){var d=0;var f=simhw_internalState("io_int_factory");if(typeof f=="undefined"){return}if(g==""){for(d=0;dInterrupt "+d+" "}e+="
";$(g).html("
"+e+"
");for(d=0;d"+d+"
"}e+="";e+="
";$(g).html(e);var a={};for(d=0;d version: "+d.components[a].version+"
abilities: "+d.components[a].abilities.join(" + ")+"\">"+a+"
"}f=f+"";var e="";e+='
'+d.sim_name+" ("+d.sim_short_name+')

sim_img_processor sim_img_controlunit '+f+"

";return e}function simcoreui_signal_dialog(a){update_signal_dialog(a);$(".popover_hw").popover("hide")}function simcoreui_init_hw_signals(n,f){var h="";var d="";var m="";var g="";var k='';for(var p in n.signals){d=n.signals[p].value;m=n.signals[p].default_value;d="0x"+d.toString(16);m="0x"+m.toString(16);if(d!=m){h="font-weight-bold"}else{h="font-weight-normal"}g="name: "+n.signals[p].name+"
value: "+d+"
default_value: "+m+"
nbits: "+n.signals[p].nbits+"
type: "+n.signals[p].type+"
visible: "+n.signals[p].visible+"
";k=k+''+p+"";if(true==f){$("#hw_signal_strong_"+p).attr("class",h);$("#hw_signal_tt_"+p).attr("data-content",g)}}k=k+"
";var a='
Signals Dependencies
Loading...

'+k+"

";return a}function simcoreui_init_hw_states(p,g){var k="";var f="";var n="";var a="";var s="";var h="";var m='';for(var q in p.states){f="-";n="-";if(typeof p.states[q].value!="undefined"){f=p.states[q].value;n=p.states[q].default_value;if(typeof f=="object"){f="object";n="object"}else{if(typeof f=="function"){f=f()}f="0x"+f.toString(16);n="0x"+n.toString(16)}}if(f!=n){k="font-weight-bold"}else{k="font-weight-normal"}if(typeof p.states[q].nbits!="undefined"){a=p.states[q].nbits}else{a="-"}if(typeof p.states[q].visible!="undefined"){s=p.states[q].visible}else{s="-"}h="name: "+q+"
value: "+f+"
default_value: "+n+"
nbits: "+a+"
visible: "+s+"
";m=m+''+q+"";if(true==g){$("#hw_state_strong_"+q).attr("class",k);$("#hw_state_tt_"+q).attr("data-content",h)}}m=m+"
";var d='
States Control States
Program Counter (PC) → '+p.ctrl_states.pc.state+"
Instruction Register (IR) → "+p.ctrl_states.ir.state+"
Stack Pointer (SP) → "+p.ctrl_states.sp.state+'

'+m+"

";return d}function simcoreui_init_hw_behaviors(d){var f='';for(var a in d.behaviors){f=f+' nparameters: "+d.behaviors[a].nparameters+"
\">"+a+"
"}f=f+"";var e='
Behaviors

'+f+"

";return e}function simcoreui_init_hw(a){var d=simhw_active();var e="";e+=simcoreui_init_hw_summary(d);e+=simcoreui_init_hw_signals(d,false);e+=simcoreui_init_hw_states(d,false);e+=simcoreui_init_hw_behaviors(d);$(a).html(e);$('[data-toggle="tooltip"]').tooltip({trigger:"hover",sanitizeFn:function(f){return f}});$(".popover_hw").popover({trigger:"hover click",container:"body",placement:"auto",template:'',sanitizeFn:function(f){return f}});return true}function simcoreui_show_hw(){var a=simhw_active();simcoreui_init_hw_signals(a,true);simcoreui_init_hw_states(a,true);return true}function simcoreui_voice_canSpeak(){if(typeof window.speechSynthesis=="undefined"){return false}if(false==get_cfg("use_voice")){return false}return true}function simcoreui_voice_speak(d){var a=null;if(simcoreui_voice_canSpeak()){a=new SpeechSynthesisUtterance(d);a.lang="es-ES";if("en"==get_cfg("ws_idiom")){a.lang="en-US"}if("es"==get_cfg("ws_idiom")){a.lang="es-EN"}window.speechSynthesis.speak(a)}}function simcoreui_voice_stopSpeak(){if(simcoreui_voice_canSpeak()){window.speechSynthesis.cancel()}}function get_verbal_from_current_mpc(){var a="";var g="";var d=simhw_sim_ctrlStates_get().mpc.state;var f=get_value(simhw_sim_state(d));var h=simhw_internalState_get("MC",f);for(var e in h){if("MADDR"===e){g=g+"MADDR is "+h[e]+". ";continue}a=a+e+" ";g=g+compute_signal_verbals(e,h[e])}a=a.trim();if(a===""){a=""}if(g.trim()===""){g=""}return"Activated signals are: "+a+". Associated actions are: "+g}function get_verbal_from_current_pc(){var a=simhw_sim_ctrlStates_get().pc.state;var f=get_value(simhw_sim_state(a));var d=parseInt(f)-4;var e=get_deco_from_pc(d);if(""==e.trim()){e="not jet defined"}return"Current instruction is: "+e+" and PC points to "+show_value(d)+". "}function request_html_url(a){var d=null;if(false==is_mobile()){if(navigator.onLine){d=fetch(a)}else{d=caches.match(a).then()}}else{d=$.ajax(a,{type:"GET",dataType:"html"})}return d}function update_div_frompartialhtml(a,e,f){var d="
Sorry, No more details available for this element.

\n";if(""==f){$(a).html(d)}else{$(a).html(f)}if((""==f)||(""==e)){return}var g=$(a).filter(e).html();if(typeof g=="undefined"){g=$(a).find(e).html()}if(typeof g=="undefined"){g=d}$(a).html(g)}function resolve_html_url(a,e,d,f){return request_html_url(e).then(function(g){if(typeof g=="object"){g.text().then(function(h){update_div_frompartialhtml(a,d,h);f()})}else{update_div_frompartialhtml(a,d,g);f()}})}function update_signal_loadhelp(d,g,f){var a=get_cfg("ws_idiom");var e="examples/hardware/"+g+"/help/signals-"+a+".html";resolve_html_url(d,e,"#"+f,function(){$(d).trigger("create")});ga("send","event","help","help.signal","help.signal."+g+"."+f)}function update_checker_loadhelp(d,f){var a=get_cfg("ws_idiom");var e="help/simulator-"+a+".html";resolve_html_url(d,e,"#"+f,function(){$(d).trigger("create")});ga("send","event","help","help.checker","help.checker."+f)}function simcoreui_do_notify(k,m,a,d){var f=$("#alerts-container");if(f.length==0){f=$('

');$("body").append(f)}var e=$('

2
"+i18n_get("gui",a,"simulator intro 2")+"

3
"+i18n_get("gui",a,"simulator intro 3")+"

";return b}function default_asmdbg_content_vertical(){var a="

1
"+i18n_get("gui",wsi,"simulator intro 1")+"

2
"+i18n_get("gui",wsi,"simulator intro 2")+"

3
"+i18n_get("gui",wsi,"simulator intro 3")+"

";return a}function wepsim_click_asm_columns(c){var a="SHOWCODE_"+c;var b=get_cfg(a);b=!b;var e="table .asm_"+c;if(b!==false){$(e).show()}else{$(e).hide()}set_cfg(a,b);save_cfg();var d="#asm_"+c;$(d).removeClass("btn-outline-secondary").removeClass("btn-dark");if(b!==false){$(d).addClass("btn-dark")}else{$(d).addClass("btn-outline-secondary")}}function wepsim_show_asm_columns_checked(a){var b='";return b}function wepsim_checkpoint_get(f){var b=document.getElementById(f);if(b===null){return false}var e=get_cfg("ws_mode");var a=wepsim_state_get_clk();var c=simcore_simstate_current2state();a.content=simcore_simstate_state2checklist(c);var d={mode:e,firmware:inputfirm.getValue(),assembly:inputasm.getValue(),state_current:a,state_history:wepsim_state_history_get(),record:simcore_record_get(),tag:b.value,notify:true};return d}function wepsim_checkpoint_save(c,f,d){var a=document.getElementById(c);var b=document.getElementById(f);if((a===null)||(b===null)){return false}var e=JSON.stringify(d,null,2);wepsim_save_to_file(e,a.value);return true}function wepsim_checkpoint_load(e,g,d){var a=document.getElementById(e);var c=document.getElementById(g);var b=document.getElementById(d).files[0];if((a===null)||(c===null)||(b===null)){return false}var f=function(i){var h=JSON.parse(i);wepsim_checkpoint_loadFromObj(h,a,c,b)};wepsim_load_from_file(b,f)}function wepsim_checkpoint_loadURI(b,d,g){var a=document.getElementById(d);var c=document.getElementById(g);if((a===null)||(c===null)||(b===null)){return false}try{wepsim_preload_json(b.href,function(e){var h={name:b.href};wepsim_checkpoint_loadFromObj(e,a,c,h)});return true}catch(f){return false}}function wepsim_checkpoint_loadFromObj(g,a,e,d){var f="";var b="";if(g===null){return"null checkpoint"}if(typeof g.mode==="undefined"){g.mode="ep"}if(typeof g.firmware==="undefined"){g.firmware=""}if(typeof g.assembly==="undefined"){g.assembly=""}if(typeof g.state_history==="undefined"){g.state_history=[]}wepsim_state_history_reset();for(var c=0;cState: restored into the state history.";wsweb_select_main(g.mode);inputfirm.setValue(g.firmware);inputasm.setValue(g.assembly);f+="
  • Firmware and Assembly: Loaded";b="";if(g.firmware.trim()!==""){wepsim_compile_firmware(g.firmware);b+="Firmware"}if(g.assembly.trim()!==""){wepsim_compile_assembly(g.assembly);b+=" + Assembly"}if(b!==""){f+=" + Compiled"}f+=".
  • ";if((typeof a!=="undefined")&&(a!==null)){a.value=d.name}if((typeof a!=="undefined")&&(e!==null)){e.value=g.tag}f+="
  • Tag: "+g.tag+"
  • ";simcore_record_set(g.record);if(f!==""){f="WepSIM has been instructed to restore a checkpoint:
      "+f+'
    To close this notification please press in the X mark.
    '}if(g.notify===true){simcoreui_notify("Restored Checkpoint",f,"info",get_cfg("NOTIF_delay"))}return f}var clipboard_copy="";function get_clipboard_copy(){return clipboard_copy}function SelectText(b){var d=document,e=d.getElementById(b),a,c;if(d.body.createTextRange){a=document.body.createTextRange();a.moveToElementText(e);a.select()}else{if(window.getSelection){c=window.getSelection();a=document.createRange();a.selectNodeContents(e);c.removeAllRanges();c.addRange(a)}}}function wepsim_clipboard_CopyFromDiv(b){var c="unsuccessful";try{SelectText(b);if(document.execCommand("copy")){clipboard_copy=$("#"+b).text();c="successful"}}catch(a){c+=c+" because "+a}wepsim_notify_success("INFO","Copied "+c+"!.")}function wepsim_clipboard_CopyFromTextarea(c){var d="successful";try{var b=document.getElementById(c);b.select();document.execCommand("copy");clipboard_copy=$("#"+c).val()}catch(a){d="unsuccessful"}wepsim_notify_success("INFO","Copied "+d+"!.")}function wepsim_open_config_index(){$("#container-config2").html(table_config_html(ws_config));for(m=0;m';for(e=0;e"+d[e].type+""}h=d[e].type;j=d[e].code_cfg;i=d[e].description;g=d[e].id;if(b==""){b="bg-light"}else{b=""}a=a+c+"
    '+(e+1)+'
    '+j+'
    '+i+"
    "}a=a+"";return a}function wepsim_show_breakpoint_icon_list(){var c="
    ";var b="";for(var a=0;a
    "+breakpoint_icon_list[a].type+"
    ";b=breakpoint_icon_list[a].type}c=c+""+breakpoint_icon_list[a].shortname+" icon"}c=c+'
    ';return c}var ws_config=[];ws_config.push({id:"select7",type:"General",code_cfg:"
    "+i18n_get_select()+"
    ",code_init:function(){$("#select7").val(get_cfg("ws_idiom"))},description:"Idiom for help, examples, etc."});ws_config.push({id:"select8",type:"General",code_cfg:"
    ",code_init:function(){$("#select8").val(get_cfg("ws_skin"))},description:"WepSIM User Interface Skin"});ws_config.push({id:"radio14",type:"General",code_cfg:"
    ",code_init:function(){$("#label14-"+get_cfg("enable_beta")).button("toggle")},description:"Enable experimental features"});ws_config.push({id:"radio7",type:"Editor",code_cfg:"
    ",code_init:function(){$("#label7-"+get_cfg("editor_theme")).button("toggle")},description:"Editor theme: light or dark"});ws_config.push({id:"select2",type:"Editor",code_cfg:"
    ",code_init:function(){$("#select2").val(get_cfg("editor_mode"))},description:"Editor mode: vim, emacs, etc."});ws_config.push({id:"radio12",type:"Execution",code_cfg:"
    ",code_init:function(){$("#label12-"+get_cfg("DBG_delay")).button("toggle")},description:"Running speed: execution speed"});ws_config.push({id:"radio1",type:"Execution",code_cfg:"
    ",code_init:function(){$("#label1-"+get_cfg("DBG_level")).button("toggle")},description:"Step-by-step: element in run mode"});ws_config.push({id:"select1",type:"Execution",code_cfg:" stop icon",code_init:function(){$("#img_select1").attr("src","images/stop/stop_"+get_cfg("ICON_theme")+".gif");$("#breakpointicon1").popover({html:true,content:wepsim_show_breakpoint_icon_list,sanitizeFn:function(a){return a}})},description:"Breakpoint icon: icon to be used for breakpoints"});ws_config.push({id:"select6",type:"Execution",code_cfg:"
    ",code_init:function(){$("#select6").val(get_cfg("DBG_limitins"))},description:"Limit instructions: number of instructions to be executed"});ws_config.push({id:"select3",type:"Execution",code_cfg:"
    ",code_init:function(){$("#select3").val(get_cfg("DBG_limitick"))},description:"Limit instruction ticks: to limit clock ticks"});ws_config.push({id:"radio2",type:"Register file",code_cfg:"
    ",code_init:function(){$("#label2-"+get_cfg("RF_display_format")).button("toggle")},description:"Display format (example)"});ws_config.push({id:"radio3",type:"Register file",code_cfg:"
    ",code_init:function(){$("#label3-"+get_cfg("RF_display_name")).button("toggle")},description:"Register file names"});ws_config.push({id:"radio9",type:"Register file",code_cfg:"
    ",code_init:function(){$("#label9-"+get_cfg("is_editable")).button("toggle")},description:"Editable registers: edit register file values"});ws_config.push({id:"colorpicker1",type:"Circuitry simulation",code_cfg:"
    ",code_init:function(){$("#colorpicker1").spectrum({preferredFormat:"hex",color:get_cfg("color_data_active")})},description:"Data-path color (example)"});ws_config.push({id:"colorpicker2",type:"Circuitry simulation",code_cfg:"
    ",code_init:function(){$("#colorpicker2").spectrum({preferredFormat:"hex",color:get_cfg("color_name_active")})},description:"Signal color"});ws_config.push({id:"radio10",type:"Circuitry simulation",code_cfg:"
    ",code_init:function(){$("#label10-"+get_cfg("is_byvalue")).button("toggle")},description:"Show by value or by activation"});ws_config.push({id:"radio5",type:"Circuitry simulation",code_cfg:"
    ",code_init:function(){$("#label5-"+get_cfg("is_interactive")).button("toggle")},description:"Interactive mode: signal value can be updated"});ws_config.push({id:"radio6",type:"Circuitry simulation",code_cfg:"
    ",code_init:function(){$("#label6-"+get_cfg("is_quick_interactive")).button("toggle")},description:"Quick interactive mode: quick update of signal value"});ws_config.push({id:"radio11",type:"Accesibility",code_cfg:"
    ",code_init:function(){$("#label11-"+get_cfg("use_voice")).button("toggle")},description:"Active voice: external voice control"});ws_config.push({id:"radio13",type:"Accesibility",code_cfg:"
    ",code_init:function(){$("#label13-"+get_cfg("verbal_verbose")).button("toggle")},description:"Verbalization: textual or mathematical"});ws_config.push({id:"slider3",type:"Accesibility",code_cfg:"
    ",code_init:function(){$("#label8-"+get_cfg("NOTIF_delay")).button("toggle")},description:"Notification speed: time before disapear"});function wepsim_open_examples_index(){$("#container-example1").html(table_examples_html(ws_examples));i18n_update_tags("examples");$("#example1").modal("show");ga("send","event","ui","ui.dialog","ui.dialog.example")}function wepsim_close_examples(){$("#example1").modal("hide")}function load_from_example_assembly(f,g){inputasm.setValue("Please wait...");inputasm.refresh();var c=f.split(":");var e="";if(c.length>0){e=c[0]}else{console.log("warning: example without hardware id")}var b="";if(c.length>1){b=c[1]}else{console.log("warning: example without microcode id")}var h="";if(c.length>2){h=c[2]}else{console.log("warning: example without assembly id")}var d="examples/assembly/asm-"+h+".txt";var a=function(j){inputasm.setValue(j);inputasm.refresh();var k=false;var i=get_simware();if(i.firmware.length!=0){k=wepsim_compile_assembly(j)}if(false===k){wsweb_change_workspace_assembly();return}if(true===g){setTimeout(function(){wsweb_change_workspace_simulator();show_memories_values()},50)}wepsim_notify_success("INFO","Example ready to be used.")};wepsim_load_from_url(d,a);simcore_record_append_new("Load assembly from example "+f,'load_from_example_assembly("'+f+'", '+g+");\n");ga("send","event","example","example.assembly","example.assembly."+e+"."+h)}function load_from_example_firmware(f,g){inputfirm.setValue("Please wait...");inputfirm.refresh();var c=f.split(":");var e="";if(c.length>0){e=c[0]}else{console.log("warning: example without hardware id")}var b="";if(c.length>1){b=c[1]}else{console.log("warning: example without microcode id")}var h="";if(c.length>2){h=c[2]}else{console.log("warning: example without assembly id")}var d="examples/microcode/mc-"+b+".txt";inputfirm.setOption("readOnly",false);var a=function(i){inputfirm.setValue(i);inputfirm.refresh();var j=wepsim_compile_firmware(i);if(false===j){wsweb_change_workspace_microcode();return}if(true===g){setTimeout(function(){load_from_example_assembly(f,g)},50)}else{show_memories_values();wepsim_notify_success("INFO","Example ready to be used.")}};wepsim_load_from_url(d,a);simcore_record_append_new("Load firmware from example "+f,'load_from_example_firmware("'+f+'", false);\n');ga("send","event","example","example.firmware","example.firmware."+e+"."+b)}function table_examples_html(h){var l="ep";var r=["newbie","intro","wepmips","tutorial"];var j=get_cfg("ws_mode");if((j!=="null")&&(!r.includes(j))){l=j}var q=get_cfg("base_url");var d="";var e="";var f="";var p="";var b="";var s="";var a="";var n="";var k="";var i="";var c="";for(var g=0;g"+l.toUpperCase()+": "+h[g].level+"
    "}e_modes=h[g].modes;if(!e_modes.split(",").includes(j)){continue}p=h[g].title;b=h[g].level;s=h[g].hardware;a=h[g].microcode;n=h[g].assembly;k=h[g].description;i=h[g].id;f=s+":"+a+":"+n;if(d===""){d="bg-light"}else{d=""}c=c+e+"
    '+(g+1)+'
    "+p+'
    '+k+'
    '+q+"?mode="+s+"&example="+g+'
    "}if(c.trim()===""){c='<No examples are available for the selected hardware>'}c='
    '+c+"
    ";return c}var ws_examples=[];ws_examples.push({id:"S1E1",title:"Instructions",level:"Initial",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_base",assembly:"ep_s1_e1",description:"Simple example with fetch, arithmetic instructions, and basic .text segment."});ws_examples.push({id:"S1E2",title:"Memory access",level:"Initial",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_base",assembly:"ep_s1_e2",description:"Simple example with fetch, memory access, and basic .text/.data segment."});ws_examples.push({id:"S1E3",title:"Looping",level:"Initial",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_enhanced",assembly:"ep_s1_e3",description:"Simple example with fetch, branch, and basic .text segment."});ws_examples.push({id:"S1E4",title:"Vector",level:"Initial",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_enhanced",assembly:"ep_s1_e4",description:"Simple example with fetch, branch, and basic .text/.data segment."});ws_examples.push({id:"S2E1",title:"I/O",level:"Intermediate",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_base",assembly:"ep_s2_e1",description:"Example with programmed I/O access, and basic .text/.data segment."});ws_examples.push({id:"S2E2",title:"Subrutine",level:"Intermediate",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_enhanced",assembly:"ep_s2_e2",description:"Extended example with more instructions and I/O (keyboard, display)."});ws_examples.push({id:"S2E3",title:"Masks & shift",level:"Intermediate",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_s2_e3",assembly:"ep_s2_e3",description:"More extended example with masks, shift, and basic .text/.data segment."});ws_examples.push({id:"S2E4",title:"Matrix",level:"Intermediate",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_s2_e4",assembly:"ep_s2_e4",description:"Extended example with subrutine and matrix."});ws_examples.push({id:"S3E1",title:"Interruptions",level:"Advanced",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_s3_e1",assembly:"ep_s3_e1",description:"Instructive example with interruptions support: fetch, RETI, and .ktext/.kdata."});ws_examples.push({id:"S3E2",title:"System call",level:"Advanced",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_s3_e2",assembly:"ep_s3_e2",description:"Instructive example with system call support."});ws_examples.push({id:"S3E3",title:"Exception",level:"Advanced",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_s3_e3",assembly:"ep_s3_e3",description:"Instructive example with floating point exception."});ws_examples.push({id:"S4E1",title:"Int. + syscall + except.",level:"Operating Systems",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_s4_e1",assembly:"ep_s4_e1",description:"Advanced example with interruption, system call, and exception."});ws_examples.push({id:"S4E2",title:"SC 1, 4-5, 8, 11-12",level:"Operating Systems",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_os",assembly:"ep_s4_e2",description:"Example of syscall for printing/reading integer and string."});ws_examples.push({id:"S4E3",title:"Threads",level:"Operating Systems",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_os",assembly:"ep_s4_e3",description:"Example of threads."});ws_examples.push({id:"S4E4",title:"Alloc.s",level:"Operating Systems",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_os",assembly:"ep_s4_e4",description:"Example of malloc + free."});ws_examples.push({id:"S5E1",title:"addv + seqv.",level:"Laboratory",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_s5_e1",assembly:"ep_s5_e1",description:"Application-specific extension: addv + seqv."});ws_examples.push({id:"S5E2",title:"strlen_2 + skipasciicode_2",level:"Laboratory",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_s5_e2",assembly:"ep_s5_e2",description:"Application-specific extension: strlen_2 + skipasciicode_2."});ws_examples.push({id:"S5E3",title:"madd, mmul, mxch",level:"Laboratory",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_s5_e3",assembly:"ep_s5_e3",description:"Application-specific extension: madd + mmul + mxch."});ws_examples.push({id:"S6E1",title:"Dummy instruction",level:"Special",modes:"newbie,intro,tutorial,ep",hardware:"ep",microcode:"ep_bare",assembly:"ep_s6_e1",description:"Test example."});ws_examples.push({id:"S1E1",title:"Instructions",level:"Initial",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s1_e1",description:"Simple example with fetch, arithmetic instructions, and basic .text segment."});ws_examples.push({id:"S1E2",title:"Memory access",level:"Initial",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s1_e2",description:"Simple example with fetch, memory access, and basic .text/.data segment."});ws_examples.push({id:"S1E3",title:"Looping",level:"Initial",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s1_e3",description:"Simple example with fetch, branch, and basic .text segment."});ws_examples.push({id:"S1E4",title:"Vector",level:"Initial",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s1_e4",description:"Simple example with fetch, branch, and basic .text/.data segment."});ws_examples.push({id:"S2E1",title:"I/O",level:"Intermediate",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s2_e1",description:"Example with programmed I/O access, and basic .text/.data segment."});ws_examples.push({id:"S2E3",title:"Masks & shift",level:"Intermediate",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s2_e3",description:"More extended example with masks, shift, and basic .text/.data segment."});ws_examples.push({id:"S2E4",title:"Matrix",level:"Intermediate",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s2_e4",description:"Extended example with subrutine and matrix."});ws_examples.push({id:"S3E1",title:"Interruptions",level:"Advanced",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s3_e1",description:"Example with interruptions support: fetch, RETI, and .ktext/.kdata."});ws_examples.push({id:"S3E2",title:"System call",level:"Advanced",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s3_e2",description:"Example with system call support."});ws_examples.push({id:"S3E3",title:"Exception",level:"Advanced",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s3_e3",description:"Example with floating point exception."});ws_examples.push({id:"S4E1",title:"Int. + syscall + except.",level:"Operating Systems",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s4_e1",description:"Advanced example with interruption, system call, and exception."});ws_examples.push({id:"S4E2",title:"syscall 1, 4-5, 8, 11-12",level:"Operating Systems",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s4_e2",description:"Example of syscall for printing/reading integer and string."});ws_examples.push({id:"S5E1",title:"strlen_2 + skipasciicode_2",level:"Laboratory",modes:"newbie,intro,wepmips,tutorial",hardware:"ep",microcode:"ep_mips",assembly:"ep_s5_e2",description:"Application-specific extension: strlen_2 + skipasciicode_2."});ws_examples.push({id:"S1E1",title:"Instructions",level:"Initial",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_base",assembly:"poc_s1_e1",description:"Simple example."});ws_examples.push({id:"S1E2",title:"Memory access",level:"Initial",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_base",assembly:"ep_s1_e2",description:"Simple example with fetch, memory access, and basic .text/.data segment."});ws_examples.push({id:"S1E3",title:"Looping",level:"Initial",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_base",assembly:"ep_s1_e3",description:"Simple example with fetch, branch, and basic .text segment."});ws_examples.push({id:"S1E4",title:"Vector",level:"Initial",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_base",assembly:"ep_s1_e4",description:"Simple example with fetch, branch, and basic .text/.data segment."});ws_examples.push({id:"S2E1",title:"I/O",level:"Intermediate",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_base",assembly:"ep_s2_e1",description:"Example with programmed I/O access, and basic .text/.data segment."});ws_examples.push({id:"S2E2",title:"Subrutine",level:"Intermediate",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_base",assembly:"ep_s2_e2",description:"Extended example with more instructions and I/O (keyboard, display)."});ws_examples.push({id:"S2E3",title:"Masks & shift",level:"Intermediate",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_base",assembly:"ep_s2_e3",description:"More extended example with masks, shift, and basic .text/.data segment."});ws_examples.push({id:"S2E4",title:"Matrix",level:"Intermediate",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_base",assembly:"ep_s2_e4",description:"Extended example with subrutine and matrix."});ws_examples.push({id:"S3E1",title:"Interruptions",level:"Advanced",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_s3",assembly:"ep_s3_e1",description:"Instructive example with interruptions support: fetch, RETI, and .ktext/.kdata."});ws_examples.push({id:"S3E2",title:"System call",level:"Advanced",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_s3",assembly:"ep_s3_e2",description:"Instructive example with system call support."});ws_examples.push({id:"S3E3",title:"Exception",level:"Advanced",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_s3",assembly:"ep_s3_e3",description:"Instructive example with floating point exception."});ws_examples.push({id:"S4E1",title:"Int. + syscall + except.",level:"Operating Systems",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_os",assembly:"ep_s4_e1",description:"Advanced example with interruption, system call, and exception."});ws_examples.push({id:"S4E2",title:"SC 1, 4-5, 8, 11-12",level:"Operating Systems",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_os",assembly:"ep_s4_e2",description:"Example of syscall for printing/reading integer and string."});ws_examples.push({id:"S4E3",title:"Threads",level:"Operating Systems",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_os",assembly:"ep_s4_e3",description:"Example of threads."});ws_examples.push({id:"S4E4",title:"Alloc.s",level:"Operating Systems",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_os",assembly:"ep_s4_e4",description:"Example of malloc + free."});ws_examples.push({id:"S5E1",title:"Dummy instruction",level:"Special",modes:"newbie,intro,tutorial,poc",hardware:"poc",microcode:"poc_bare",assembly:"poc_s5_e1",description:"Test example."});function wepsim_execute_reset(c,b){wepsim_state_history_reset();if(true===b){var a=get_simware();if(a.firmware.length!=0){update_memories(a)}}if(true===c){simcore_reset()}}function wepsim_execute_instruction(){var b=simcore_check_if_can_execute();if(false===b.ok){alert(b.msg);return false}var a={verbosity:0,cycles_limit:get_cfg("DBG_limitick")};b=simcore_execute_microprogram(a);if(false===b.ok){wepsim_show_stopbyevent("Info",b.msg);return false}return true}function wepsim_execute_microinstruction(){var a=simcore_check_if_can_execute();if(false===a.ok){alert(a.msg);return false}a=simcore_execute_microinstruction();if(false===a.ok){wepsim_show_stopbyevent("Info",a.msg);return false}return true}function wepsim_execute_set_breakpoint(a){return asmdbg_set_breakpoint(a)}var DBG_stop=true;var DBG_limit_instruction=0;function wepsim_execute_stop(b){var a=get_cfg("ws_idiom");var c=i18n_get("gui",a,"Run");$(b).html("
    "+c+"");$(b).css("backgroundColor","#CCCCCC");DBG_stop=true;DBG_limit_instruction=0}function wepsim_execute_play(e,d){var a=get_cfg("ws_idiom");var b=i18n_get("gui",a,"Stop");var c=simcore_check_if_can_execute();if(false===c.ok){alert(c.msg);return false}$(e).css("backgroundColor","rgb(51, 136, 204)");$(e).html("
    "+b+"");DBG_stop=false;DBG_limit_instruction=0;if(false===d){wepsim_execute_chainplay(e)}else{wepsim_execute_chainnotify(e)}}function wepsim_execute_toggle_play(b,a){if(DBG_stop===false){DBG_stop=true}else{wepsim_execute_play(b,a)}}function wepsim_check_stopbybreakpoint_firm(){var a=simhw_sim_ctrlStates_get().mpc.state;var c=get_value(simhw_sim_state(a));var b="0x"+c.toString(16);if(typeof simhw_internalState_get("MC_dashboard",c)==="undefined"){return false}return(simhw_internalState_get("MC_dashboard",c).breakpoint)}function wepsim_check_stopbybreakpoint_asm(){var a=simhw_sim_ctrlStates_get().pc.state;var c=get_value(simhw_sim_state(a));var d="0x"+c.toString(16);var b=simhw_internalState("FIRMWARE");if(typeof b.assembly[d]==="undefined"){return false}return(b.assembly[d].breakpoint)}function wepsim_show_stopbyevent(f,e){var h=simhw_sim_ctrlStates_get().mpc.state;var c=get_value(simhw_sim_state(h));var a="0x"+c.toString(16);var i=simhw_sim_ctrlStates_get().pc.state;var g=get_value(simhw_sim_state(i));var b="0x"+g.toString(16);var d=f+" @ pc="+b+"+mpc="+a;$("#dlg_title2").html(d);$("#dlg_body2").html(e);$("#current_state2").modal("show");return true}function wepsim_check_state_firm(){var a=simhw_sim_ctrlStates_get().mpc.state;var b=get_value(simhw_sim_state(a));if(false===simhw_internalState_get("MC_dashboard",b).state){return false}wepsim_state_history_add();return true}function wepsim_execute_chunk(a,e){var d=false;var c=0;var h=get_cfg("DBG_level");if(h==="instruction"){var j={verbosity:0,cycles_limit:get_cfg("DBG_limitick")};for(c=0;cget_cfg("DBG_limitins")){wepsim_show_stopbyevent("Limit","Number of executed instructions limit reached.

    See related configuration options about limits:
    ");wepsim_execute_stop(d);return}setTimeout(wepsim_execute_chainplay,get_cfg("DBG_delay"),d)}function wepsim_execute_chainnotify(b){if(DBG_stop){wepsim_execute_stop(b);return}var g=false;var l=simhw_sim_ctrlStates_get().mpc.state;var j=simhw_sim_state(l);var c=0;var h=0;for(var e=0;e1){var f="Notify @ "+c+": "+simhw_internalState_get("MC_dashboard",c).notify[1];var a='
    ';for(var d=1;d"}a+="
    ";bootbox.confirm({title:f,message:a,buttons:{cancel:{label:"Stop",className:"btn-danger btn-sm"},confirm:{label:"Continue",className:"btn-primary btn-sm"}},callback:function(i){if(i){setTimeout(wepsim_execute_chainnotify,get_cfg("DBG_delay"),b)}else{wepsim_execute_stop(b)}}});return}}setTimeout(wepsim_execute_chainnotify,get_cfg("DBG_delay"),b)}function table_helps_html(a){var b="";var c="";var d="";var l="";var j="";var i="";var n="";var k="";var g="";var f=[];for(var e=0;e';for(e=0;e"+a[e].u_type+""}l=a[e].title;j=a[e].i_type;i=a[e].u_type;n=a[e].reference;k=a[e].description;g=a[e].id;var h="";if("relative"===j){h="wepsim_help_set_relative('"+n+"');wepsim_help_refresh();"}if("absolute"===j){h="wepsim_help_set_absolute('"+n+"');wepsim_help_refresh();"}if("code"===j){h=n}if(c===""){c="bg-light"}else{c=""}b=b+d+"
    '+(e+1)+'
    '+l+'
    '+k+"
    "}b=b+"";return b}function wepsim_help_refresh(){var c="#iframe_help1";var e="";var f=get_cfg("ws_idiom");var h=simhw_active().sim_short_name;var b=$("#help1_ref").data("relative");if((typeof b!="undefined")&&(b!="")){var g=b.split("#");e="help/"+g[0]+"-"+f+".html";$("#help1").modal("show");resolve_html_url(c,e,"#"+g[1],function(){});ga("send","event","help","help.simulator","help.simulator."+b);return}var a=$("#help1_ref").data("absolute");if((typeof a!="undefined")&&(a!="")){e="examples/hardware/"+h+"/help/"+a+"-"+f+".html";$("#help1").modal("show");resolve_html_url(c,e,"",function(){});ga("send","event","help","help."+a,"help."+a+".*");return}var d=$("#help1_ref").data("code");if((typeof d!="undefined")&&(d==="true")){ga("send","event","help","help.code","help.code.*");return}wepsim_open_help_index()}function wepsim_open_help_index(){$("#iframe_help1").html(table_helps_html(ws_help));$("#help1_ref").data("relative","");$("#help1_ref").data("absolute","");$("#help1_ref").data("code","false");i18n_update_tags("help");$("#help1").modal("show");ga("send","event","ui","ui.dialog","ui.dialog.help")}function wepsim_open_help_content(a){$("#iframe_help1").html(a);$("#help1_ref").data("relative","");$("#help1_ref").data("absolute","");$("#help1_ref").data("code","true");$("#help1").modal("show")}function wepsim_close_help(){$("#help1").modal("hide")}function wepsim_help_set_relative(a){$("#help1_ref").data("relative",a);$("#help1_ref").data("absolute","");$("#help1_ref").data("code","false")}function wepsim_help_set_absolute(a){$("#help1_ref").data("relative","");$("#help1_ref").data("absolute",a);$("#help1_ref").data("code","false")}var ws_help=[];ws_help.push({id:"simulator",title:"Welcome tutorial",i_type:"code",u_type:"tutorial",reference:"wepsim_close_help(); sim_tutorial_showframe('welcome', 0);",description:"Open the welcome tutorial.
    "});ws_help.push({id:"simulator",title:"Simple usage tutorial",i_type:"code",u_type:"tutorial",reference:"wepsim_close_help(); sim_tutorial_showframe('simpleusage', 0);",description:"Open the simple usage tutorial, for microprogramming and assembly programming.
    "});ws_help.push({id:"simulator",title:"Simulator: firmware",i_type:"relative",u_type:"simulator",reference:"simulator#help_simulator_firmware",description:"How to work with the firmware to be loaded into the control memory.
    "});ws_help.push({id:"microcode",title:"Microcode format",i_type:"relative",u_type:"simulator",reference:"simulator#help_firmware_format",description:"Syntax of the microcode used.
    "});ws_help.push({id:"simulator",title:"Simulator: assembly",i_type:"relative",u_type:"simulator",reference:"simulator#help_simulator_assembly",description:"How to work with the assembly that use the aforementioned firmware.
    "});ws_help.push({id:"assembly",title:"Assembly format",i_type:"relative",u_type:"simulator",reference:"simulator#help_assembly_format",description:"Syntax of the assembly elements.
    "});ws_help.push({id:"simulator",title:"Simulator: execution",i_type:"relative",u_type:"simulator",reference:"simulator#help_simulator_execution",description:"How the simulator can execute the assembly and firmware.
    "});ws_help.push({id:"architecture",title:"Simulated architecture",i_type:"absolute",u_type:"simulated processor",reference:"hardware",description:"Description of the simulated processor architecture.
    "});ws_help.push({id:"architecture",title:"Simulated signals",i_type:"absolute",u_type:"simulated processor",reference:"signals",description:"Main signals summary of the simulated elemental processor.
    "});ws_help.push({id:"architecture",title:"Hardware summary",i_type:"code",u_type:"simulated processor",reference:"var ahw1 = simhw_active().sim_short_name ; var img1 = 'examples/hardware/' + ahw1 + '/images/cpu.svg?time=20190102' ; var txt1 = 'Your browser does not support SVG' ;var lyt1 = '' + txt1 + ''; wepsim_open_help_content(lyt1) ;",description:"Reference card for the simulated elemental processor hardware.
    "});ws_help.push({id:"about",title:"License, platforms, etc.",i_type:"relative",u_type:"info",reference:"about#help_about",description:"WepSIM license, supported platforms, technologies used.
    "});ws_help.push({id:"authors",title:"Authors",i_type:"code",u_type:"info",reference:"wepsim_close_help();$('#about2').modal('show');",description:"Authors of WepSIM.
    "});function wepsim_notify_success(a,b){return simcoreui_notify(a,b,"success",get_cfg("NOTIF_delay"))}function wepsim_notify_error(a,b){return simcoreui_notify(a,b,"danger",0)}function wepsim_notify_warning(a,b){return simcoreui_notify(a,b,"warning",get_cfg("NOTIF_delay"))}function wepsim_notify_close(){return simcoreui_notify_close()}function wepsim_preload_hash(e){var g="";if(e.mode!==""){wsweb_select_main(e.mode);g+="
  • Mode set to "+e.mode+".
  • "}if(e.example!==""){var a=parseInt(e.example);var f=ws_examples[a];if(typeof f!=="undefined"){var c=f.hardware+":"+f.microcode+":"+f.assembly;load_from_example_firmware(c,true);g+="
  • Example titled "+f.title+" has been loaded.
  • "}}var b=[];if(e.simulator!==""){b=e.simulator.split(":");g+="
  • User interface has been adapted.
  • "}if(typeof b[0]!=="undefined"){if(b[0]==="microcode"){wsweb_change_show_processor()}if(b[0]==="assembly"){wsweb_change_show_asmdbg()}}if(typeof b[1]!=="undefined"){var d=b[1].toUpperCase();wsweb_set_details(d)}if(g!==""){g="WepSIM has been instructed to preload some work for you:
      "+g+'
    To close this notification please press in the X mark.
    In order to execute an example please press the Run button.
    ';if(e.notify!=="false"){simcoreui_notify("WepSIM preloads some work",g,"info",0)}}return 0}function wepsim_preload_json(b,a){var c=1*1024*1024;var d=new XMLHttpRequest();d.open("HEAD",b,true);d.onreadystatechange=function(){if(this.readyState==this.DONE){var e=0;var f=d.getResponseHeader("Content-Length");if(f!==null){e=parseInt(f)}if(eµadd "+c}}var state_history=[];function wepsim_state_history_get(){return state_history}function wepsim_state_history_reset(){$("[data-toggle=popover4]").popover("hide");state_history=[]}function wepsim_state_history_add(){var a=wepsim_state_get_clk();var b=simcore_simstate_current2state();a.content=simcore_simstate_state2checklist(b);state_history.push(a)}function wepsim_state_results_empty(){var a='<Empty (only modified values are shown)>';$("#check_results1").html(a);$("#s_clip").html("clipboard");$("#s_ref").html("reference")}function wepsim_state_history_empty(){var a='<Empty history>';$("#history1").html(a)}function wepsim_state_history_list(){if(0==state_history.length){wepsim_state_history_empty();wepsim_state_results_empty();return}$("[data-toggle=popover4]").popover("hide");var c=0;var e="";var d="";var a="";var f="";for(var b=state_history.length-1;b>=0;b--){c=new Date(state_history[b].time);e=c.getFullYear()+"-"+(c.getMonth()+1)+"-"+c.getDate()+"-"+c.getHours()+"-"+c.getMinutes()+"-"+c.getSeconds()+"-"+c.getMilliseconds();d='
    '+state_history[b].title+"
    was inserted at:
    Date: "+c.getFullYear()+"-"+(c.getMonth()+1)+"-"+c.getDate()+"
    Hour: "+c.getHours()+":"+c.getMinutes()+":"+c.getSeconds()+"-"+c.getMilliseconds()+'
    ";vrow="";if(b!=0){vrow='
     
     
    '}f+='
    '+d+'
    '+state_history[b].content+'
    "}$("#history1").html(f);wepsim_state_results_empty();$("[data-toggle=popover4]").popover({html:true,placement:"auto",trigger:"click",container:"body",animation:false,content:function(){var g=$(this).attr("id");return $("#popover-content-"+g).html()},sanitizeFn:function(g){return g}})}function wepsim_dialog_current_state(){wepsim_notify_success("INFO","Loading, please wait...");i18n_update_tags("states");$("#current_state1").modal("show");setTimeout(function(){var d=wepsim_state_get_clk();$("#curr_clk_maddr").html(d.title_short);var g=simcore_simstate_current2state();var e=simcore_simstate_state2checklist(g);$("#end_state1").tokenfield("setTokens",e);wepsim_notify_close();wepsim_notify_success("INFO","Current state loaded !");var c=0;var f=0;var h="";for(var b in g){f=0;for(var a in g[b]){f++}h=h+","+b+"="+f;c=c+f}ga("send","event","state","state.dump","state.dump.ci="+get_value(simhw_sim_state("REG_IR_DECO"))+",neltos="+c+h)},80)}function wepsim_dialog_check_state(c,b,e){var a=simcore_simstate_diff_results(b,e);var d="";if(0==a.errors){d=" 
    Meets the specified requirements
    "}else{d=simcore_simstate_checkreport2html(a.result,true)}$("#"+c).html(d);ga("send","event","state","state.check","state.check,ci="+get_value(simhw_sim_state("REG_IR_DECO"))+".a="+a.neltos_expected+",b="+a.neltos_obtained+",sd="+a.errors);return true}function wepsim_dialog_check_reset(a,b){$("#"+b).tokenfield("setTokens",[]);$("#"+b).val("");$("#"+a).html("");return true}function sim_tutorial_goframe(c,a,b){if(typeof tutorials[c]=="undefined"){return}var d=tutorials[c][get_cfg("ws_idiom")];if(typeof d=="undefined"){return}d[a].code_post();tutbox.modal("hide");setTimeout(function(){sim_tutorial_showframe(c,b)},d[a].wait_next);if(simcoreui_voice_canSpeak()){window.speechSynthesis.cancel()}}function sim_tutorial_cancelframe(){var a=get_cfg("ws_mode");wsweb_select_main(a);tutbox.modal("hide");if(simcoreui_voice_canSpeak()){window.speechSynthesis.cancel()}}function sim_tutorial_showframe(c,b){if(typeof tutorials[c]=="undefined"){return}var e=tutorials[c][get_cfg("ws_idiom")];if(typeof e=="undefined"){return}if(b==e.length){return}if(b<0){return}ga("send","event","help","help.tutorial","help.tutorial.name="+c+",step="+b);e[b].code_pre();var a=get_cfg("ws_idiom");var d={};d.cancel={label:i18n_get("gui",a,"Disable tutorial mode"),className:"btn-danger col float-right",callback:function(){sim_tutorial_cancelframe()}};if(b!=0){d.prev={label:i18n_get("gui",a,"Prev."),className:"btn-success col float-right",callback:function(){sim_tutorial_goframe(c,b,b-1)}}}if(b!=(e.length-1)){d.next={label:i18n_get("gui",a,"Next"),className:"btn-success col float-right",callback:function(){sim_tutorial_goframe(c,b,b+1)}}}else{d.end={label:i18n_get("gui",a,"End"),className:"btn-success col float-right",callback:function(){sim_tutorial_goframe(c,b,b+1)}}}tutbox=bootbox.dialog({title:e[b].title,message:e[b].message,buttons:d,size:"large",animate:false});simcoreui_voice_speak(e[b].title.replace(/<[^>]*>/g,"")+". "+e[b].message.replace(/<[^>]*>/g,""))}function sim_tutorial_loadFromCheckpoint(b){wsweb_recordbar_show();var a={name:"examples/checkpoint/tutorial_"+b+".txt"};wepsim_load_from_url(a.name,function(c){var d=null;if(c!==""){d=JSON.parse(c)}wepsim_checkpoint_loadFromObj(d,"FileNameToSaveAs1","tagToSave1",a)})}function wepsim_newbie_tour(){var a=get_cfg("ws_idiom");wepsim_newbie_tour_setLang(a);tour=introJs();tour.setOptions({steps:ws_tour,keyboardNavigation:true,showProgress:true,overlayOpacity:"0.1"});tour.onbeforechange(function(){ws_tour[this._currentStep].do_before()});tour.onexit(function(){$("#config2").modal("hide");$("#help1").modal("hide");$("#example1").modal("hide");if(get_cfg("ws_mode")!="ep"){wsweb_select_main("ep")}return true});tour.start();ga("send","event","ui","ui.tour","ui.tour.newbie")}function wepsim_newbie_tour_setLang(c){var b="";for(var a=0;aStep 0",step:"step0",position:"auto",do_before:function(){return true}});ws_tour.push({intro:"Step 1",step:"step1",position:"auto",do_before:function(){tour.refresh();return true}});ws_tour.push({element:"#select4",intro:"Step 2",step:"step2",position:"auto",do_before:function(){wsweb_select_main("ep");tour.refresh();return true}});ws_tour.push({element:"#btn_help1",intro:"Step 3",step:"step3",position:"auto",do_before:function(){tour.refresh();return true}});ws_tour.push({element:"#btn_example1",intro:"Step 4",step:"step4",position:"auto",do_before:function(){tour.refresh();return true}});ws_tour.push({element:"#btn_cfg1",intro:"Step 5",step:"step5",position:"auto",do_before:function(){tour.refresh();return true}});ws_tour.push({intro:"Step 6",step:"step6",position:"auto",do_before:function(){tour.refresh();return true}});function wepsim_load_from_file(c,b){var a=new FileReader();a.onload=function(d){var e=d.target.result;if(null!==b){b(e)}};a.onerror=function(d){console.error("File could not be read! Code "+d.target.error.code)};a.readAsText(c,"UTF-8")}function wepsim_save_to_file(d,c){var b=new Blob([d],{type:"text/plain"});var a=document.createElement("a");a.download=c;a.innerHTML="Download File";if(window.webkitURL!=null){a.href=window.webkitURL.createObjectURL(b)}else{a.href=window.URL.createObjectURL(b);a.onclick=function(e){document.body.removeChild(e.target)};a.style.display="none";document.body.appendChild(a)}a.click()}function getURLTimeStamp(){var b=new Date();var e=b.getUTCFullYear();var f=b.getUTCMonth()+1;var c=b.getUTCDate();var a=b.getUTCHours();var d=b.getUTCMinutes();return e+f+c+a+d}function fetchURL(a){if(navigator.onLine){return fetch(a+"?time="+getURLTimeStamp())}return caches.match(a)}function wepsim_load_from_url(b,a){if(false==is_mobile()){fetchURL(b).then(function(d){if(typeof d=="undefined"){console.error("File "+b+" could not be fetched: * Please check that you are on-line.");return}if(d.ok){d.text().then(function(e){a(e)})}})}else{var c=new XMLHttpRequest();c.onreadystatechange=function(){if((c.readyState==4)&&((c.status==200)||(c.status==0))){var d=c.responseText;if(null!=a){a(d)}}};c.open("GET",b,true);c.send()}}function wepsim_voice_init(){if(!annyang){return false}annyang.addCommands(wepsim_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("

    Warning:
    annyang not available

    ","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}var wepsim_voice_commands={};var wepsim_voice_dialog=null;wepsim_voice_commands.hello=function(){var a="Hello, I am WepSIM, nice to meet you. ";simcoreui_voice_speak(a)};wepsim_voice_commands["(show) configuration"]=function(){wepsim_open_config_index()};wepsim_voice_commands["(show) examples"]=function(){wepsim_open_examples_index()};wepsim_voice_commands["load example :id (from) :level"]=function(d,c){var b=parseInt(d);var a=parseInt(c);load_from_example_firmware("ep:S"+a+"E"+a,true)};wepsim_voice_commands["(show) help"]=function(){wepsim_open_help_index();wepsim_help_refresh()};wepsim_voice_commands.close=function(){wepsim_close_help();wepsim_close_examples();wepsim_close_config();if(null!=wepsim_voice_dialog){wepsim_voice_dialog.modal("hide")}};wepsim_voice_commands.reset=function(){wepsim_execute_reset(true,true);var a="Current processor has been reset.";simcoreui_voice_speak(a)};wepsim_voice_commands.next=function(){wepsim_execute_instruction();var a="Next executed.";simcoreui_voice_speak(a)};wepsim_voice_commands["next micro(instruction)"]=function(){wepsim_execute_microinstruction();var a="Next microinstruction executed. ";simcoreui_voice_speak(a)};wepsim_voice_commands.play=function(){wepsim_execute_play("#qbp",false)};wepsim_voice_commands.stop=function(){wepsim_execute_stop("#qbp")};wepsim_voice_commands["describe micro(instruction)"]=function(){var a=get_verbal_from_current_mpc();simcoreui_voice_speak(a)};wepsim_voice_commands["describe instruction"]=function(){var a=get_verbal_from_current_pc();simcoreui_voice_speak(a)};wepsim_voice_commands.list=function(){var a="available commands:
    ";for(var b in wepsim_voice_commands){a=a+" * '"+b+"'
    "}wepsim_voice_dialog=bootbox.alert(a);wepsim_voice_dialog.modal("show");var c=$("

    ").html(a).text();simcoreui_voice_speak(c)};wepsim_voice_commands.silence=function(){simcoreui_voice_stopSpeak()};function sim_change_workspace(b,a){if((typeof $.mobile!="undefined")&&(typeof $.mobile.pageContainer!="undefined")&&(typeof $.mobile.pageContainer.pagecontainer!="undefined")){$.mobile.pageContainer.pagecontainer("change",b)}else{$("#carousel-8").carousel(a)}}function wepsim_load_hw(){return true}function wepsim_show_wepmips(){$(".multi-collapse-2").collapse("show");$("#slider_cpucu").hide();$("#tab26").hide();$("#tab21").hide();$("#tab24").click();inputfirm.setOption("readOnly",true);$("#btn_micro1").addClass("d-none");return true}function wepsim_hide_wepmips(){$(".multi-collapse-2").collapse("show");$("#slider_cpucu").show();$("#tab26").show();$("#tab21").show();inputfirm.setOption("readOnly",false);$("#btn_micro1").removeClass("d-none");return true}function wepsim_activehw(i){simhw_setActive(i);var h=document.getElementById("svg_p");if(h!=null){h.setAttribute("data",simhw_active().sim_img_processor)}h=document.getElementById("svg_cu");if(h!=null){h.setAttribute("data",simhw_active().sim_img_controlunit)}h=document.getElementById("svg_p2");if(h!=null){h.setAttribute("data",simhw_active().sim_img_cpu)}var f=document.getElementById("svg_p");f.addEventListener("load",function(){simcore_init_eventlistener("svg_p",hash_detail2action);refresh()},false);var d=document.getElementById("svg_cu");d.addEventListener("load",function(){simcore_init_eventlistener("svg_cu",hash_detail2action);refresh()},false);wepsim_notify_warning("WARNING","Please remember the current firmware and assembly might need to be reloaded, because previous working session of the simulated hardware are not kept.");wepsim_notify_success("INFO",'"'+simhw_active().sim_name+'" has been activated.');var c=get_simware();update_memories(c);simcore_reset();var g=default_asmdbg_content_horizontal();for(var e in c.assembly){g=assembly2html(c.mp,c.labels2,c.seg,c.assembly);break}$("#asm_debugger").html(g);showhideAsmElements();return true}function wepsim_change_mode(b){var a=-1;switch(b){case"newbie":case"intro":case"wepmips":case"tutorial":a=simhw_getIdByName("ep");wepsim_activehw(a);break;default:a=simhw_getIdByName(b);wepsim_activehw(a);break}if("wepmips"==b){wepsim_show_wepmips()}else{wepsim_hide_wepmips()}if("intro"==b){sim_tutorial_loadFromCheckpoint("2");return true}if("newbie"==b){wepsim_newbie_tour();return true}return true}function set_ab_size(f,d,g){var e=g;var c=12-e;$(f).removeClass();$(d).removeClass();if(e!=0){$(f).addClass("col-"+e)}else{$(f).addClass("col-12 order-1")}if(c!=0){$(d).addClass("col-"+c)}else{$(d).addClass("col-12 order-2")}}function wepsim_dialogbox_close_all(){$("#example1").modal("hide");$("#help1").modal("hide");$("#config2").modal("hide");$("#current_state1").modal("hide");$("#bin2").modal("hide")}var wepsim_updatediv_timer=null;function wepsim_updatetime(a,b){$(a).html("Close automatically after "+b+" seconds.");wepsim_updatediv_timer=setTimeout(wepsim_updatetime,1000,a,(b-1))}function wepsim_updatetime_start(a,b){clearTimeout(wepsim_updatediv_timer);wepsim_updatetime(a,b)}function wepsim_confirm_exit(a){var b="o/";(a||window.event).returnValue=b;return b}function wepsim_general_exception_handler(a){alert("Please try to cleanup the browser cache and try again.\nWepSIM was improperly used and found an error, sorry :-(\n\nDiagnostic:\n * Error message: "+a.message+"\n * Runtime stack:\n"+a.stack+"\nAfter close this alert, WepSIM will try to reload and by-pass the cache (just in case).\n");location.reload(true)}function wepsim_show_quick_menu(b){var a=get_cfg("ws_idiom");var c='";return c}function wepsim_init_helpDropdown(){var a="";a=i18n_get_dropdown(["gui","cfg"],"");$("#config2_lang").html(a);a=i18n_get_dropdown(["gui","help"],"wepsim_help_refresh();");$("#help1_lang").html(a);a=i18n_get_dropdown(["gui","examples"],"");$("#example1_lang").html(a);a=i18n_get_dropdown(["gui","states"],"update_checker_loadhelp('#help3a','help_dumper');");$("#current_state1_lang").html(a)}function wepsim_init_ui(){window.addEventListener("beforeunload",wepsim_confirm_exit);if(typeof jQuery.fx!="undefined"){jQuery.fx.off=true}if(typeof ko!="undefined"){ko.options.deferUpdates=true}$(".carousel").carousel({touch:false});$(".dropify").dropify();$("div.wsversion").replaceWith(get_cfg("version"));var b=get_cfg("enable_beta");if(b===false){$(".enabled_beta").addClass("d-none")}$("#end_state1").tokenfield({inputType:"textarea"});$("#end_state2").tokenfield({inputType:"textarea"});$("#po1").popover({trigger:"manual",html:true,placement:"auto",animation:false,container:"body",template:'',content:function(){return wepsim_show_quick_menu("po1")},sanitizeFn:function(c){return c}});$('[data-toggle="tooltip"]').tooltip({trigger:"hover",sanitizeFn:function(c){return c}});$('a[data-toggle="popover1"]').popover({placement:"bottom",animation:false,trigger:"focus, hover",delay:{show:500,hide:100},sanitizeFn:function(c){return c}});showhideAsmElements();var a=$("#asm_table");$("#asm_debugger_container").scroll(function(){a.prop("scrollTop",this.scrollTop).prop("scrollLeft",this.scrollLeft)});$("[data-toggle=popover2]").popover({html:true,placement:"auto",animation:false,container:"body",content:function(){return wepsim_show_asm_columns_checked("popover2_asm")},sanitizeFn:function(c){return c}}).on("shown.bs.popover",function(c){showhideAsmHeader()});inputfirm_cfg={value:"\n\n\n\n\n\n\n\n\n\n\n\n",lineNumbers:true,lineWrapping:true,matchBrackets:true,tabSize:2,foldGutter:{rangeFinder:new CodeMirror.fold.combine(CodeMirror.fold.brace,CodeMirror.fold.comment)},gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"],mode:"text/javascript"};inputfirm=sim_init_editor("inputFirmware",inputfirm_cfg);inputasm_cfg={value:"\n\n\n\n\n\n\n\n\n\n\n\n",lineNumbers:true,lineWrapping:true,matchBrackets:true,tabSize:2,extraKeys:{"Ctrl-Space":function(c){CodeMirror.showHint(c,function(e,g){var f=get_simware();var j=e.getCursor();var d=[];for(var h=0;h Go line '+e+" "}wepsim_notify_error("ERROR",d+"
    "+a+'
    ')}function wepsim_show_binary_code(b,a){$(a).html("

    Loading binary, please wait...

    WARNING: loading binary might take time on slow mobile devices.
    ");$(a).css({width:"100%",height:"inherit !important"});$(b).modal("show");setTimeout(function(){var d=get_simware();$(a).html(mp2html(d.mp,d.labels2,d.seg));for(var c in d.seg){$("#compile_begin_"+c).html("0x"+d.seg[c].begin.toString(16));$("#compile_end_"+c).html("0x"+d.seg[c].end.toString(16))}},300)}function wepsim_show_binary_microcode(b,a){$(a).html("

    Loading binary, please wait...

    WARNING: loading binary might take time on slow mobile devices.
    ");$(a).css({width:"100%",height:"inherit !important"});$(b).modal("show");setTimeout(function(){var c=get_simware();$(a).html(firmware2html(c.firmware,true));$(a).css({width:"inherit !important",height:"inherit !important"});$(b).trigger("refresh")},300)}function wepsim_compile_assembly(b){var a=get_simware();if(a.firmware.length===0){alert("WARNING: please load the microcode first.");sim_change_workspace("#main3");return false}var c=simlang_compile(b,a);if(c.error!=null){showError(c.error,"inputasm");return false}wepsim_notify_success("INFO","Assembly was compiled and loaded.");set_simware(c);update_memories(a);$("#asm_debugger").html(assembly2html(c.mp,c.labels2,c.seg,c.assembly));showhideAsmElements();simcore_reset();return true}function wepsim_compile_firmware(b){var a=simcore_compile_firmware(b);if(false===a.ok){showError(a.msg,"inputfirm");return false}wepsim_notify_success("INFO","Microcode was compiled and loaded.");simcore_reset();return true}function wsweb_change_workspace_simulator(){sim_change_workspace("#main1",0);setTimeout(function(){ga("send","event","ui","ui.workspace","ui.workspace.simulator")},50);simcore_record_append_new("Change to workspace simulator","wsweb_change_workspace_simulator();\n");return true}function wsweb_change_workspace_microcode(){sim_change_workspace("#main3",1);setTimeout(function(){inputfirm.refresh();ga("send","event","ui","ui.workspace","ui.workspace.microcode")},50);simcore_record_append_new("Change to workspace microcode","wsweb_change_workspace_microcode();\n");return true}function wsweb_change_workspace_assembly(){sim_change_workspace("#main4",2);setTimeout(function(){inputasm.refresh();ga("send","event","ui","ui.workspace","ui.workspace.assembly")},50);simcore_record_append_new("Change to workspace assembly","wsweb_change_workspace_assembly();\n");return true}function wsweb_change_show_processor(){$("#tab26").tab("show");start_drawing();refresh();simcore_record_append_new("Show processor details","wsweb_change_show_processor();\n");return true}function wsweb_change_show_asmdbg(){stop_drawing();$("#tab24").tab("show");simcore_record_append_new("Show assembly debugger","wsweb_change_show_asmdbg();\n");var b=fullshow_asmdbg_pc();if(typeof b[0]=="undefined"){return true}var a=$("#asm_debugger_container");a[0].scrollTop=b[0].offsetTop;return true}function wsweb_execution_reset(){wepsim_execute_reset(true,true);simcoreui_show_hw();simcore_record_append_new("Reset","wsweb_execution_reset();\n");return true}function wsweb_execution_microinstruction(){wepsim_execute_microinstruction();simcoreui_show_hw();simcore_record_append_new("Execute microinstruction","wsweb_execution_microinstruction();\n");return true}function wsweb_execution_instruction(){wepsim_execute_instruction();simcoreui_init_hw("#config_HW");simcore_record_append_new("Execute instruction","wsweb_execution_instruction();\n");return true}function wsweb_execution_run(){var a=get_cfg("ws_mode");if("tutorial"==a){wepsim_notify_success("INFO","Tutorial mode on. Use the configuration to change it.")}wepsim_execute_toggle_play("#qbp",(a=="tutorial"));simcore_record_append_new("Run","wsweb_execution_run();\n");$("#current_state2").one("hidden.bs.modal",function(){simcore_record_append_new("Close execution summary","wsweb_dialogbox_close_all();\n")});return true}function wsweb_dialogbox_open_examples(){wepsim_open_examples_index();$("[data-toggle=tooltip]").tooltip("hide");simcore_record_append_new("Open examples","wsweb_dialogbox_open_examples();\n");$("#example1").one("hidden.bs.modal",function(){simcore_record_append_new("Close examples","wsweb_dialogbox_close_all();\n")});wsweb_scroll_record("#container-example1");simcore_record_captureInit();return true}function wsweb_dialogbox_open_help(){wepsim_open_help_index();wepsim_help_refresh();$("[data-toggle=tooltip]").tooltip("hide");simcore_record_append_new("Open help","wsweb_dialogbox_open_help();\n");$("#help1").one("hidden.bs.modal",function(){simcore_record_append_new("Close help","wsweb_dialogbox_close_all();\n")});simcore_record_captureInit();return true}function wsweb_dialogbox_open_config(){wepsim_open_config_index();$("[data-toggle=tooltip]").tooltip("hide");simcore_record_append_new("Open configuration","wsweb_dialogbox_open_config();\n");$("#config2").one("hidden.bs.modal",function(){simcore_record_append_new("Close configuration","wsweb_dialogbox_close_all();\n")});wsweb_scroll_record("#container-config2");simcore_record_captureInit();return true}function wsweb_dialogbox_open_state(){wepsim_dialog_current_state();$("[data-toggle=tooltip]").tooltip("hide");simcore_record_append_new("Open state","wsweb_dialogbox_open_state();\n");$("#current_state1").one("hidden.bs.modal",function(){simcore_record_append_new("Close state","wsweb_dialogbox_close_all();\n")});simcore_record_captureInit();return true}function wsweb_dialogbox_open_binary_assembly(){var a=inputasm.getValue();var b=wepsim_compile_assembly(a);if(true==b){wepsim_show_binary_code("#bin2","#compile_results")}simcore_record_append_new("Open binary assembly","wsweb_dialogbox_open_binary_assembly();\n");$("#bin2").one("hidden.bs.modal",function(){simcore_record_append_new("Close binary assembly","wsweb_dialogbox_close_all();\n")});return true}function wsweb_dialogbox_open_binary_firmware(){var b=inputfirm.getValue();var a=wepsim_compile_firmware(b);if(true==a){wepsim_show_binary_microcode("#bin2","#compile_results");wepsim_notify_success("INFO","Please remember to recompile the assembly code if needed.")}simcore_record_append_new("Open binary firmware","wsweb_dialogbox_open_binary_firmware();\n");$("#bin2").one("hidden.bs.modal",function(){simcore_record_append_new("Close binary firmware","wsweb_dialogbox_close_all();\n")});return true}function wsweb_dialogbox_open_hardware_summary(){var b=simhw_active().sim_short_name;var c="examples/hardware/"+b+"/images/cpu.svg?time=20190102";var a="Your browser does not support SVG";wepsim_open_help_content(a);simcore_record_append_new("Open hardware summary","wsweb_dialogbox_open_hardware_summary();\n");$("#help1").one("hidden.bs.modal",function(){simcore_record_append_new("Open hardware summary","wsweb_dialogbox_close_all();\n")});return true}function wsweb_dialogbox_close_state(){$("#current_state1").modal("hide");simcore_record_append_new("Close states dialogbox","wsweb_dialogbox_close_state();\n");return true}function wsweb_dialogbox_close_all(){$("#example1").modal("hide");$("#help1").modal("hide");$("#config2").modal("hide");$("#current_state1").modal("hide");$("#current_state2").modal("hide");$("#bin2").modal("hide");simcore_record_append_new("Close all dialogboxes","wsweb_dialogbox_close_all();\n");return true}function wsweb_set_details_select(b){$("#tab"+b).trigger("click");$("#select5a").val(b);var a=$("#s5b_"+b).html();$("#select5b").html(a);simcore_record_append_new("Change select details to "+b,"wsweb_set_details_select("+b+");\n");return true}var hash_detail2action={CLOCK:function(){wepsim_execute_microinstruction()},REGISTER_FILE:function(){wsweb_set_details_select(11);show_rf_values()},CONTROL_MEMORY:function(){wsweb_set_details_select(16);show_memories_values()},CPU_STATS:function(){wsweb_set_details_select(17);show_memories_values()},MEMORY:function(){wsweb_set_details_select(14);show_memories_values()},MEMORY_CONFIG:function(){wsweb_set_details_select(18);show_memories_values()},KEYBOARD:function(){wsweb_set_details_select(12);show_memories_values()},SCREEN:function(){wsweb_set_details_select(12);show_memories_values()},IO_STATS:function(){wsweb_set_details_select(15);show_memories_values()},IO_CONFIG:function(){wsweb_set_details_select(19);show_memories_values()},FRM_EDITOR:function(){wsweb_set_details_select(20);inputfirm.refresh()},ASM_EDITOR:function(){wsweb_set_details_select(21);inputasm.refresh()},HARDWARE:function(){wsweb_set_details_select(22);$("[data-toggle=tooltip]").tooltip("hide");simcoreui_init_hw("#config_HW");var a=get_cfg("ws_idiom");i18n_update_tags("gui",a)}};function wsweb_set_details(a){if(typeof hash_detail2action[a]!=="undefined"){hash_detail2action[a]()}simcore_record_append_new("Set details to "+a,"wsweb_set_details('"+a+"');\n");return true}function wsweb_select_main(b){set_cfg("ws_mode",b);save_cfg();wepsim_change_mode(b);$("#select4").css("background-color","#F6F6F6");if("tutorial"==b){$("#select4").css("background-color","#D4DB17")}var a=$("#s4_"+b).html();$("#select4").html(a);simcore_record_append_new("Set main work mode to "+b,'wsweb_select_main("'+b+'");\n');return true}function wsweb_mode_update(b){wsweb_select_main(b);simcore_init_ui("#states_ALL","#states_BR","#io_ALL","#cpu_ALL","#config_MP","#config_IO");simcoreui_init_hw("#config_HW");var a=get_cfg("ws_idiom");i18n_update_tags("gui",a);simcore_record_append_new("Update work mode to "+b,'wsweb_mode_update("'+b+'");\n');return true}function wsweb_set_cpucu_size(a){$("#slider2b").val(a);set_ab_size("#eltos_cpu_a","#eltos_cpu_b",a);set_cfg("CPUCU_size",a);save_cfg();simcore_record_append_new("Set cpu-cu size to "+a,"wsweb_set_cpucu_size("+a+");\n");return true}function wsweb_set_c1c2_size(a){$("#slider2a").val(a);set_ab_size("#col1","#col2",a);set_cfg("C1C2_size",a);save_cfg();simcore_record_append_new("Set c1-c2 size to "+a,"wsweb_set_c1c2_size("+a+");\n");return true}function wsweb_assembly_compile(){var a=inputasm.getValue();var b=wepsim_compile_assembly(a);simcore_record_append_new("Compile assembly","wsweb_assembly_compile();\n");return true}function wsweb_firmware_compile(){var b=inputfirm.getValue();wepsim_compile_firmware(b);var a="
    Please remember that after updates on the microcode, the assembly code has be re-compiled too.
    ";$("#asm_debugger").html(a);simcore_record_append_new("Compile firmware","wsweb_firmware_compile();\n");return true}function wsweb_save_controlmemory_to_file(){var b=get_cfg("ws_idiom");var c=i18n_get("dialogs",b,"Sure Control Memory...")+"\n\n";if(confirm(c)){var a=get_simware();var d=saveFirmware(a);if(d.trim()==""){alert("The Microcode loaded in memory is empty!\nPlease load a Microcode first in memory in order to save it.")}else{inputfirm.setValue(d)}var f=document.getElementById("inputFileNameToSaveAs").value;var e=inputfirm.getValue();wepsim_save_to_file(e,f)}simcore_record_append_new("Save control memory to file","wsweb_save_controlmemory_to_file();\n");return true}var wsweb_nfbox=null;function wsweb_notifyuser_show(c,a,b){if(c.trim()===""){c="<empty title>"}if(a.trim()===""){a="<empty message>"}$("#notifyuser1_title").html(c);$("#notifyuser1_message").html(a);wepsim_updatetime_start("#notifyuser1_footer",b/1000);wsweb_nfbox=$("#notifyuser1");wsweb_nfbox.modal("show");return true}function wsweb_notifyuser_hide(){wsweb_nfbox.modal("hide");return true}function wsweb_notifyuser_add(){if(simcore_record_isRecording()===false){return}var a=get_cfg("ws_idiom");var c={};c.cancel={label:i18n_get("gui",a,"Close"),className:"btn-danger col float-left mr-auto"};c.end={label:i18n_get("gui",a,"Save"),className:"btn-success col float-right",callback:function(){var i=$("#frm_title1").val();var e=$("#frm_message1").val();var g=$("#frm_duration1").val();var j=i.replace(/<[^>]*>/g,"");var d=""+j+"";var h=e.replace(/<[^>]*>/g,"");var k=""+h+"";var l=h.replace(new RegExp("\r?\n","g"),"
    ");var f=parseInt(g);if(isNaN(f)){f=5000}else{f=1000*f}simcore_record_setTimeBeforeNow(500);simcore_record_append_new('Show message with title "'+d+'" and body "'+k+'".','wsweb_notifyuser_show("'+j+'", "'+l+'", "'+f+'");\n');simcore_record_setTimeBeforeNow(f);simcore_record_append_new('Close message with title "'+d+'".',"wsweb_notifyuser_hide();\n")}};var b='

    "}$("#history1").html(f);wepsim_state_results_empty();$("[data-toggle=popover4]").popover({html:true,placement:"auto",trigger:"click",container:"body",animation:false,content:function(){var g=$(this).attr("id");return $("#popover-content-"+g).html()},sanitizeFn:function(g){return g}})}function wepsim_dialog_current_state(){wepsim_notify_success("INFO","Loading, please wait...");i18n_update_tags("states");$("#current_state1").modal("show");setTimeout(function(){var d=wepsim_state_get_clk();$("#curr_clk_maddr").html(d.title_short);var g=simcore_simstate_current2state();var e=simcore_simstate_state2checklist(g);$("#end_state1").tokenfield("setTokens",e);wepsim_notify_close();wepsim_notify_success("INFO","Current state loaded !");var c=0;var f=0;var h="";for(var b in g){f=0;for(var a in g[b]){f++}h=h+","+b+"="+f;c=c+f}ga("send","event","state","state.dump","state.dump.ci="+get_value(simhw_sim_state("REG_IR_DECO"))+",neltos="+c+h)},80)}function wepsim_dialog_check_state(c,b,e){var a=simcore_simstate_diff_results(b,e);var d="";if(0==a.errors){d=" 
    Meets the specified requirements
    "}else{d=simcore_simstate_checkreport2html(a.result,true)}$("#"+c).html(d);ga("send","event","state","state.check","state.check,ci="+get_value(simhw_sim_state("REG_IR_DECO"))+".a="+a.neltos_expected+",b="+a.neltos_obtained+",sd="+a.errors);return true}function wepsim_dialog_check_reset(a,b){$("#"+b).tokenfield("setTokens",[]);$("#"+b).val("");$("#"+a).html("");return true}function sim_tutorial_goframe(c,a,b){if(typeof tutorials[c]=="undefined"){return}var d=tutorials[c][get_cfg("ws_idiom")];if(typeof d=="undefined"){return}d[a].code_post();tutbox.modal("hide");setTimeout(function(){sim_tutorial_showframe(c,b)},d[a].wait_next);if(simcoreui_voice_canSpeak()){window.speechSynthesis.cancel()}}function sim_tutorial_cancelframe(){var a=get_cfg("ws_mode");wsweb_select_main(a);tutbox.modal("hide");if(simcoreui_voice_canSpeak()){window.speechSynthesis.cancel()}}function sim_tutorial_showframe(c,b){if(typeof tutorials[c]=="undefined"){return}var e=tutorials[c][get_cfg("ws_idiom")];if(typeof e=="undefined"){return}if(b==e.length){return}if(b<0){return}ga("send","event","help","help.tutorial","help.tutorial.name="+c+",step="+b);e[b].code_pre();var a=get_cfg("ws_idiom");var d={};d.cancel={label:i18n_get("gui",a,"Disable tutorial mode"),className:"btn-danger col float-right",callback:function(){sim_tutorial_cancelframe()}};if(b!=0){d.prev={label:i18n_get("gui",a,"Prev."),className:"btn-success col float-right",callback:function(){sim_tutorial_goframe(c,b,b-1)}}}if(b!=(e.length-1)){d.next={label:i18n_get("gui",a,"Next"),className:"btn-success col float-right",callback:function(){sim_tutorial_goframe(c,b,b+1)}}}else{d.end={label:i18n_get("gui",a,"End"),className:"btn-success col float-right",callback:function(){sim_tutorial_goframe(c,b,b+1)}}}tutbox=bootbox.dialog({title:e[b].title,message:e[b].message,buttons:d,size:"large",animate:false});simcoreui_voice_speak(e[b].title.replace(/<[^>]*>/g,"")+". "+e[b].message.replace(/<[^>]*>/g,""))}function sim_tutorial_loadFromCheckpoint(b){wsweb_recordbar_show();var a={name:"examples/checkpoint/tutorial_"+b+".txt"};wepsim_load_from_url(a.name,function(c){var d=null;if(c!==""){d=JSON.parse(c)}wepsim_checkpoint_loadFromObj(d,"FileNameToSaveAs1","tagToSave1",a)})}function wepsim_newbie_tour(){var a=get_cfg("ws_idiom");wepsim_newbie_tour_setLang(a);tour=introJs();tour.setOptions({steps:ws_tour,keyboardNavigation:true,showProgress:true,overlayOpacity:"0.1"});tour.onbeforechange(function(){ws_tour[this._currentStep].do_before()});tour.onexit(function(){$("#config2").modal("hide");$("#help1").modal("hide");$("#example1").modal("hide");if(get_cfg("ws_mode")!="ep"){wsweb_select_main("ep")}return true});tour.start();ga("send","event","ui","ui.tour","ui.tour.newbie")}function wepsim_newbie_tour_setLang(c){var b="";for(var a=0;aStep 0",step:"step0",position:"auto",do_before:function(){return true}});ws_tour.push({intro:"Step 1",step:"step1",position:"auto",do_before:function(){tour.refresh();return true}});ws_tour.push({element:"#select4",intro:"Step 2",step:"step2",position:"auto",do_before:function(){wsweb_select_main("ep");tour.refresh();return true}});ws_tour.push({element:"#btn_help1",intro:"Step 3",step:"step3",position:"auto",do_before:function(){tour.refresh();return true}});ws_tour.push({element:"#btn_example1",intro:"Step 4",step:"step4",position:"auto",do_before:function(){tour.refresh();return true}});ws_tour.push({element:"#btn_cfg1",intro:"Step 5",step:"step5",position:"auto",do_before:function(){tour.refresh();return true}});ws_tour.push({intro:"Step 6",step:"step6",position:"auto",do_before:function(){tour.refresh();return true}});function wepsim_load_from_file(c,b){var a=new FileReader();a.onload=function(d){var e=d.target.result;if(null!==b){b(e)}};a.onerror=function(d){console.error("File could not be read! Code "+d.target.error.code)};a.readAsText(c,"UTF-8")}function wepsim_save_to_file(d,c){var b=new Blob([d],{type:"text/plain"});var a=document.createElement("a");a.download=c;a.innerHTML="Download File";if(window.webkitURL!=null){a.href=window.webkitURL.createObjectURL(b)}else{a.href=window.URL.createObjectURL(b);a.onclick=function(e){document.body.removeChild(e.target)};a.style.display="none";document.body.appendChild(a)}a.click()}function getURLTimeStamp(){var b=new Date();var e=b.getUTCFullYear();var f=b.getUTCMonth()+1;var c=b.getUTCDate();var a=b.getUTCHours();var d=b.getUTCMinutes();return e+f+c+a+d}function fetchURL(a){if(navigator.onLine){return fetch(a+"?time="+getURLTimeStamp())}return caches.match(a)}function wepsim_load_from_url(b,a){if(false==is_mobile()){fetchURL(b).then(function(d){if(typeof d=="undefined"){console.error("File "+b+" could not be fetched: * Please check that you are on-line.");return}if(d.ok){d.text().then(function(e){a(e)})}})}else{var c=new XMLHttpRequest();c.onreadystatechange=function(){if((c.readyState==4)&&((c.status==200)||(c.status==0))){var d=c.responseText;if(null!=a){a(d)}}};c.open("GET",b,true);c.send()}}function wepsim_voice_init(){if(!annyang){return false}annyang.addCommands(wepsim_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("

    Warning:
    annyang not available

    ","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}var wepsim_voice_commands={};var wepsim_voice_dialog=null;wepsim_voice_commands.hello=function(){var a="Hello, I am WepSIM, nice to meet you. ";simcoreui_voice_speak(a)};wepsim_voice_commands["(show) configuration"]=function(){wepsim_open_config_index()};wepsim_voice_commands["(show) examples"]=function(){wepsim_open_examples_index()};wepsim_voice_commands["load example :id (from) :level"]=function(d,c){var b=parseInt(d);var a=parseInt(c);load_from_example_firmware("ep:S"+a+"E"+a,true)};wepsim_voice_commands["(show) help"]=function(){wepsim_open_help_index();wepsim_help_refresh()};wepsim_voice_commands.close=function(){wepsim_close_help();wepsim_close_examples();wepsim_close_config();if(null!=wepsim_voice_dialog){wepsim_voice_dialog.modal("hide")}};wepsim_voice_commands.reset=function(){wepsim_execute_reset(true,true);var a="Current processor has been reset.";simcoreui_voice_speak(a)};wepsim_voice_commands.next=function(){wepsim_execute_instruction();var a="Next executed.";simcoreui_voice_speak(a)};wepsim_voice_commands["next micro(instruction)"]=function(){wepsim_execute_microinstruction();var a="Next microinstruction executed. ";simcoreui_voice_speak(a)};wepsim_voice_commands.play=function(){wepsim_execute_play("#qbp",false)};wepsim_voice_commands.stop=function(){wepsim_execute_stop("#qbp")};wepsim_voice_commands["describe micro(instruction)"]=function(){var a=get_verbal_from_current_mpc();simcoreui_voice_speak(a)};wepsim_voice_commands["describe instruction"]=function(){var a=get_verbal_from_current_pc();simcoreui_voice_speak(a)};wepsim_voice_commands.list=function(){var a="available commands:
    ";for(var b in wepsim_voice_commands){a=a+" * '"+b+"'
    "}wepsim_voice_dialog=bootbox.alert(a);wepsim_voice_dialog.modal("show");var c=$("

    ").html(a).text();simcoreui_voice_speak(c)};wepsim_voice_commands.silence=function(){simcoreui_voice_stopSpeak()};function sim_change_workspace(b,a){if((typeof $.mobile!="undefined")&&(typeof $.mobile.pageContainer!="undefined")&&(typeof $.mobile.pageContainer.pagecontainer!="undefined")){$.mobile.pageContainer.pagecontainer("change",b)}else{$("#carousel-8").carousel(a)}}function wepsim_load_hw(){return true}function wepsim_show_wepmips(){$(".multi-collapse-2").collapse("show");$("#slider_cpucu").hide();$("#tab26").hide();$("#tab21").hide();$("#tab24").click();inputfirm.setOption("readOnly",true);$("#btn_micro1").addClass("d-none");return true}function wepsim_hide_wepmips(){$(".multi-collapse-2").collapse("show");$("#slider_cpucu").show();$("#tab26").show();$("#tab21").show();inputfirm.setOption("readOnly",false);$("#btn_micro1").removeClass("d-none");return true}function wepsim_activehw(i){simhw_setActive(i);var h=document.getElementById("svg_p");if(h!=null){h.setAttribute("data",simhw_active().sim_img_processor)}h=document.getElementById("svg_cu");if(h!=null){h.setAttribute("data",simhw_active().sim_img_controlunit)}h=document.getElementById("svg_p2");if(h!=null){h.setAttribute("data",simhw_active().sim_img_cpu)}var f=document.getElementById("svg_p");f.addEventListener("load",function(){simcore_init_eventlistener("svg_p",hash_detail2action);refresh()},false);var d=document.getElementById("svg_cu");d.addEventListener("load",function(){simcore_init_eventlistener("svg_cu",hash_detail2action);refresh()},false);wepsim_notify_warning("WARNING","Please remember the current firmware and assembly might need to be reloaded, because previous working session of the simulated hardware are not kept.");wepsim_notify_success("INFO",'"'+simhw_active().sim_name+'" has been activated.');var c=get_simware();update_memories(c);simcore_reset();var g=default_asmdbg_content_horizontal();for(var e in c.assembly){g=assembly2html(c.mp,c.labels2,c.seg,c.assembly);break}$("#asm_debugger").html(g);showhideAsmElements();return true}function wepsim_change_mode(b){var a=-1;switch(b){case"newbie":case"intro":case"wepmips":case"tutorial":a=simhw_getIdByName("ep");wepsim_activehw(a);break;default:a=simhw_getIdByName(b);wepsim_activehw(a);break}if("wepmips"==b){wepsim_show_wepmips()}else{wepsim_hide_wepmips()}if("intro"==b){sim_tutorial_loadFromCheckpoint("2");return true}if("newbie"==b){wepsim_newbie_tour();return true}return true}function set_ab_size(f,d,g){var e=g;var c=12-e;$(f).removeClass();$(d).removeClass();if(e!=0){$(f).addClass("col-"+e)}else{$(f).addClass("col-12 order-1")}if(c!=0){$(d).addClass("col-"+c)}else{$(d).addClass("col-12 order-2")}}function wepsim_dialogbox_close_all(){$("#example1").modal("hide");$("#help1").modal("hide");$("#config2").modal("hide");$("#current_state1").modal("hide");$("#bin2").modal("hide")}var wepsim_updatediv_timer=null;function wepsim_updatetime(a,b){$(a).html("Close automatically after "+b+" seconds.");wepsim_updatediv_timer=setTimeout(wepsim_updatetime,1000,a,(b-1))}function wepsim_updatetime_start(a,b){clearTimeout(wepsim_updatediv_timer);wepsim_updatetime(a,b)}function wepsim_confirm_exit(a){var b="o/";(a||window.event).returnValue=b;return b}function wepsim_general_exception_handler(a){alert("Please try to cleanup the browser cache and try again.\nWepSIM was improperly used and found an error, sorry :-(\n\nDiagnostic:\n * Error message: "+a.message+"\n * Runtime stack:\n"+a.stack+"\nAfter close this alert, WepSIM will try to reload and by-pass the cache (just in case).\n");location.reload(true)}function wepsim_show_quick_menu(b){var a=get_cfg("ws_idiom");var c='";return c}function wepsim_init_helpDropdown(){var a="";a=i18n_get_dropdown(["gui","cfg"],"");$("#config2_lang").html(a);a=i18n_get_dropdown(["gui","help"],"wepsim_help_refresh();");$("#help1_lang").html(a);a=i18n_get_dropdown(["gui","examples"],"");$("#example1_lang").html(a);a=i18n_get_dropdown(["gui","states"],"update_checker_loadhelp('#help3a','help_dumper');");$("#current_state1_lang").html(a)}function wepsim_init_ui(){window.addEventListener("beforeunload",wepsim_confirm_exit);if(typeof jQuery.fx!="undefined"){jQuery.fx.off=true}if(typeof ko!="undefined"){ko.options.deferUpdates=true}$(".carousel").carousel({touch:false});$(".dropify").dropify();$("div.wsversion").replaceWith(get_cfg("version"));var b=get_cfg("enable_beta");if(b===false){$(".enabled_beta").addClass("d-none")}$("#end_state1").tokenfield({inputType:"textarea"});$("#end_state2").tokenfield({inputType:"textarea"});$("#po1").popover({trigger:"manual",html:true,placement:"auto",animation:false,container:"body",template:'',content:function(){return wepsim_show_quick_menu("po1")},sanitizeFn:function(c){return c}});$('[data-toggle="tooltip"]').tooltip({trigger:"hover",sanitizeFn:function(c){return c}});$('a[data-toggle="popover1"]').popover({placement:"bottom",animation:false,trigger:"focus, hover",delay:{show:500,hide:100},sanitizeFn:function(c){return c}});showhideAsmElements();var a=$("#asm_table");$("#asm_debugger_container").scroll(function(){a.prop("scrollTop",this.scrollTop).prop("scrollLeft",this.scrollLeft)});$("[data-toggle=popover2]").popover({html:true,placement:"auto",animation:false,container:"body",content:function(){return wepsim_show_asm_columns_checked("popover2_asm")},sanitizeFn:function(c){return c}}).on("shown.bs.popover",function(c){showhideAsmHeader()});inputfirm_cfg={value:"\n\n\n\n\n\n\n\n\n\n\n\n",lineNumbers:true,lineWrapping:true,matchBrackets:true,tabSize:2,foldGutter:{rangeFinder:new CodeMirror.fold.combine(CodeMirror.fold.brace,CodeMirror.fold.comment)},gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"],mode:"text/javascript"};inputfirm=sim_init_editor("inputFirmware",inputfirm_cfg);inputasm_cfg={value:"\n\n\n\n\n\n\n\n\n\n\n\n",lineNumbers:true,lineWrapping:true,matchBrackets:true,tabSize:2,extraKeys:{"Ctrl-Space":function(c){CodeMirror.showHint(c,function(e,g){var f=get_simware();var j=e.getCursor();var d=[];for(var h=0;h Go line '+e+" "}wepsim_notify_error("ERROR",d+"
    "+a+'
    ')}function wepsim_show_binary_code(b,a){$(a).html("

    Loading binary, please wait...

    WARNING: loading binary might take time on slow mobile devices.
    ");$(a).css({width:"100%",height:"inherit !important"});$(b).modal("show");setTimeout(function(){var d=get_simware();$(a).html(mp2html(d.mp,d.labels2,d.seg));for(var c in d.seg){$("#compile_begin_"+c).html("0x"+d.seg[c].begin.toString(16));$("#compile_end_"+c).html("0x"+d.seg[c].end.toString(16))}},300)}function wepsim_show_binary_microcode(b,a){$(a).html("

    Loading binary, please wait...

    WARNING: loading binary might take time on slow mobile devices.
    ");$(a).css({width:"100%",height:"inherit !important"});$(b).modal("show");setTimeout(function(){var c=get_simware();$(a).html(firmware2html(c.firmware,true));$(a).css({width:"inherit !important",height:"inherit !important"});$(b).trigger("refresh")},300)}function wepsim_compile_assembly(b){var a=get_simware();if(a.firmware.length===0){alert("WARNING: please load the microcode first.");sim_change_workspace("#main3");return false}var c=simlang_compile(b,a);if(c.error!=null){showError(c.error,"inputasm");return false}wepsim_notify_success("INFO","Assembly was compiled and loaded.");set_simware(c);update_memories(a);$("#asm_debugger").html(assembly2html(c.mp,c.labels2,c.seg,c.assembly));showhideAsmElements();simcore_reset();return true}function wepsim_compile_firmware(b){var a=simcore_compile_firmware(b);if(false===a.ok){showError(a.msg,"inputfirm");return false}wepsim_notify_success("INFO","Microcode was compiled and loaded.");simcore_reset();return true}function wsweb_change_workspace_simulator(){sim_change_workspace("#main1",0);setTimeout(function(){ga("send","event","ui","ui.workspace","ui.workspace.simulator")},50);simcore_record_append_new("Change to workspace simulator","wsweb_change_workspace_simulator();\n");return true}function wsweb_change_workspace_microcode(){sim_change_workspace("#main3",1);setTimeout(function(){inputfirm.refresh();ga("send","event","ui","ui.workspace","ui.workspace.microcode")},50);simcore_record_append_new("Change to workspace microcode","wsweb_change_workspace_microcode();\n");return true}function wsweb_change_workspace_assembly(){sim_change_workspace("#main4",2);setTimeout(function(){inputasm.refresh();ga("send","event","ui","ui.workspace","ui.workspace.assembly")},50);simcore_record_append_new("Change to workspace assembly","wsweb_change_workspace_assembly();\n");return true}function wsweb_change_show_processor(){$("#tab26").tab("show");start_drawing();refresh();simcore_record_append_new("Show processor details","wsweb_change_show_processor();\n");return true}function wsweb_change_show_asmdbg(){stop_drawing();$("#tab24").tab("show");simcore_record_append_new("Show assembly debugger","wsweb_change_show_asmdbg();\n");var b=fullshow_asmdbg_pc();if(typeof b[0]=="undefined"){return true}var a=$("#asm_debugger_container");a[0].scrollTop=b[0].offsetTop;return true}function wsweb_execution_reset(){wepsim_execute_reset(true,true);simcoreui_show_hw();simcore_record_append_new("Reset","wsweb_execution_reset();\n");return true}function wsweb_execution_microinstruction(){wepsim_execute_microinstruction();simcoreui_show_hw();simcore_record_append_new("Execute microinstruction","wsweb_execution_microinstruction();\n");return true}function wsweb_execution_instruction(){wepsim_execute_instruction();simcoreui_init_hw("#config_HW");simcore_record_append_new("Execute instruction","wsweb_execution_instruction();\n");return true}function wsweb_execution_run(){var a=get_cfg("ws_mode");if("tutorial"==a){wepsim_notify_success("INFO","Tutorial mode on. Use the configuration to change it.")}wepsim_execute_toggle_play("#qbp",(a=="tutorial"));simcore_record_append_new("Run","wsweb_execution_run();\n");$("#current_state2").one("hidden.bs.modal",function(){simcore_record_append_new("Close execution summary","wsweb_dialogbox_close_all();\n")});return true}function wsweb_dialogbox_open_examples(){wepsim_open_examples_index();$("[data-toggle=tooltip]").tooltip("hide");simcore_record_append_new("Open examples","wsweb_dialogbox_open_examples();\n");$("#example1").one("hidden.bs.modal",function(){simcore_record_append_new("Close examples","wsweb_dialogbox_close_all();\n")});wsweb_scroll_record("#container-example1");simcore_record_captureInit();return true}function wsweb_dialogbox_open_help(){wepsim_open_help_index();wepsim_help_refresh();$("[data-toggle=tooltip]").tooltip("hide");simcore_record_append_new("Open help","wsweb_dialogbox_open_help();\n");$("#help1").one("hidden.bs.modal",function(){simcore_record_append_new("Close help","wsweb_dialogbox_close_all();\n")});simcore_record_captureInit();return true}function wsweb_dialogbox_open_config(){wepsim_open_config_index();$("[data-toggle=tooltip]").tooltip("hide");simcore_record_append_new("Open configuration","wsweb_dialogbox_open_config();\n");$("#config2").one("hidden.bs.modal",function(){simcore_record_append_new("Close configuration","wsweb_dialogbox_close_all();\n")});wsweb_scroll_record("#container-config2");simcore_record_captureInit();return true}function wsweb_dialogbox_open_state(){wepsim_dialog_current_state();$("[data-toggle=tooltip]").tooltip("hide");simcore_record_append_new("Open state","wsweb_dialogbox_open_state();\n");$("#current_state1").one("hidden.bs.modal",function(){simcore_record_append_new("Close state","wsweb_dialogbox_close_all();\n")});simcore_record_captureInit();return true}function wsweb_dialogbox_open_binary_assembly(){var a=inputasm.getValue();var b=wepsim_compile_assembly(a);if(true==b){wepsim_show_binary_code("#bin2","#compile_results")}simcore_record_append_new("Open binary assembly","wsweb_dialogbox_open_binary_assembly();\n");$("#bin2").one("hidden.bs.modal",function(){simcore_record_append_new("Close binary assembly","wsweb_dialogbox_close_all();\n")});return true}function wsweb_dialogbox_open_binary_firmware(){var b=inputfirm.getValue();var a=wepsim_compile_firmware(b);if(true==a){wepsim_show_binary_microcode("#bin2","#compile_results");wepsim_notify_success("INFO","Please remember to recompile the assembly code if needed.")}simcore_record_append_new("Open binary firmware","wsweb_dialogbox_open_binary_firmware();\n");$("#bin2").one("hidden.bs.modal",function(){simcore_record_append_new("Close binary firmware","wsweb_dialogbox_close_all();\n")});return true}function wsweb_dialogbox_open_hardware_summary(){var b=simhw_active().sim_short_name;var c="examples/hardware/"+b+"/images/cpu.svg?time=20190102";var a="Your browser does not support SVG";wepsim_open_help_content(a);simcore_record_append_new("Open hardware summary","wsweb_dialogbox_open_hardware_summary();\n");$("#help1").one("hidden.bs.modal",function(){simcore_record_append_new("Open hardware summary","wsweb_dialogbox_close_all();\n")});return true}function wsweb_dialogbox_close_state(){$("#current_state1").modal("hide");simcore_record_append_new("Close states dialogbox","wsweb_dialogbox_close_state();\n");return true}function wsweb_dialogbox_close_all(){$("#example1").modal("hide");$("#help1").modal("hide");$("#config2").modal("hide");$("#current_state1").modal("hide");$("#current_state2").modal("hide");$("#bin2").modal("hide");simcore_record_append_new("Close all dialogboxes","wsweb_dialogbox_close_all();\n");return true}function wsweb_set_details_select(b){$("#tab"+b).trigger("click");$("#select5a").val(b);var a=$("#s5b_"+b).html();$("#select5b").html(a);simcore_record_append_new("Change select details to "+b,"wsweb_set_details_select("+b+");\n");return true}var hash_detail2action={CLOCK:function(){wepsim_execute_microinstruction()},REGISTER_FILE:function(){wsweb_set_details_select(11);show_rf_values()},CONTROL_MEMORY:function(){wsweb_set_details_select(16);show_memories_values()},CPU_STATS:function(){wsweb_set_details_select(17);show_memories_values()},MEMORY:function(){wsweb_set_details_select(14);show_memories_values()},MEMORY_CONFIG:function(){wsweb_set_details_select(18);show_memories_values()},KEYBOARD:function(){wsweb_set_details_select(12);show_memories_values()},SCREEN:function(){wsweb_set_details_select(12);show_memories_values()},IO_STATS:function(){wsweb_set_details_select(15);show_memories_values()},IO_CONFIG:function(){wsweb_set_details_select(19);show_memories_values()},FRM_EDITOR:function(){wsweb_set_details_select(20);inputfirm.refresh()},ASM_EDITOR:function(){wsweb_set_details_select(21);inputasm.refresh()},HARDWARE:function(){wsweb_set_details_select(22);$("[data-toggle=tooltip]").tooltip("hide");simcoreui_init_hw("#config_HW");var a=get_cfg("ws_idiom");i18n_update_tags("gui",a)}};function wsweb_set_details(a){if(typeof hash_detail2action[a]!=="undefined"){hash_detail2action[a]()}simcore_record_append_new("Set details to "+a,"wsweb_set_details('"+a+"');\n");return true}function wsweb_select_main(b){set_cfg("ws_mode",b);save_cfg();wepsim_change_mode(b);$("#select4").css("background-color","#F6F6F6");if("tutorial"==b){$("#select4").css("background-color","#D4DB17")}var a=$("#s4_"+b).html();$("#select4").html(a);simcore_record_append_new("Set main work mode to "+b,'wsweb_select_main("'+b+'");\n');return true}function wsweb_mode_update(b){wsweb_select_main(b);simcore_init_ui("#states_ALL","#states_BR","#io_ALL","#cpu_ALL","#config_MP","#config_IO");simcoreui_init_hw("#config_HW");var a=get_cfg("ws_idiom");i18n_update_tags("gui",a);simcore_record_append_new("Update work mode to "+b,'wsweb_mode_update("'+b+'");\n');return true}function wsweb_set_cpucu_size(a){$("#slider2b").val(a);set_ab_size("#eltos_cpu_a","#eltos_cpu_b",a);set_cfg("CPUCU_size",a);save_cfg();simcore_record_append_new("Set cpu-cu size to "+a,"wsweb_set_cpucu_size("+a+");\n");return true}function wsweb_set_c1c2_size(a){$("#slider2a").val(a);set_ab_size("#col1","#col2",a);set_cfg("C1C2_size",a);save_cfg();simcore_record_append_new("Set c1-c2 size to "+a,"wsweb_set_c1c2_size("+a+");\n");return true}function wsweb_assembly_compile(){var a=inputasm.getValue();var b=wepsim_compile_assembly(a);simcore_record_append_new("Compile assembly","wsweb_assembly_compile();\n");return true}function wsweb_firmware_compile(){var b=inputfirm.getValue();wepsim_compile_firmware(b);var a="
    Please remember that after updates on the microcode, the assembly code has be re-compiled too.
    ";$("#asm_debugger").html(a);simcore_record_append_new("Compile firmware","wsweb_firmware_compile();\n");return true}function wsweb_save_controlmemory_to_file(){var b=get_cfg("ws_idiom");var c=i18n_get("dialogs",b,"Sure Control Memory...")+"\n\n";if(confirm(c)){var a=get_simware();var d=saveFirmware(a);if(d.trim()==""){alert("The Microcode loaded in memory is empty!\nPlease load a Microcode first in memory in order to save it.")}else{inputfirm.setValue(d)}var f=document.getElementById("inputFileNameToSaveAs").value;var e=inputfirm.getValue();wepsim_save_to_file(e,f)}simcore_record_append_new("Save control memory to file","wsweb_save_controlmemory_to_file();\n");return true}var wsweb_nfbox=null;function wsweb_notifyuser_show(c,a,b){if(c.trim()===""){c="<empty title>"}if(a.trim()===""){a="<empty message>"}$("#notifyuser1_title").html(c);$("#notifyuser1_message").html(a);wepsim_updatetime_start("#notifyuser1_footer",b/1000);wsweb_nfbox=$("#notifyuser1");wsweb_nfbox.modal("show");return true}function wsweb_notifyuser_hide(){wsweb_nfbox.modal("hide");return true}function wsweb_notifyuser_add(){if(simcore_record_isRecording()===false){return}var a=get_cfg("ws_idiom");var c={};c.cancel={label:i18n_get("gui",a,"Close"),className:"btn-danger col float-left mr-auto"};c.end={label:i18n_get("gui",a,"Save"),className:"btn-success col float-right",callback:function(){var i=$("#frm_title1").val();var e=$("#frm_message1").val();var g=$("#frm_duration1").val();var j=i.replace(/<[^>]*>/g,"");var d=""+j+"";var h=e.replace(/<[^>]*>/g,"");var k=""+h+"";var l=h.replace(new RegExp("\r?\n","g"),"
    ");var f=parseInt(g);if(isNaN(f)){f=5000}else{f=1000*f}simcore_record_setTimeBeforeNow(500);simcore_record_append_new('Show message with title "'+d+'" and body "'+k+'".','wsweb_notifyuser_show("'+j+'", "'+l+'", "'+f+'");\n');simcore_record_setTimeBeforeNow(f);simcore_record_append_new('Close message with title "'+d+'".',"wsweb_notifyuser_hide();\n")}};var b='