Use CPU timer functions (instead of browser timeout/interval functions) to control device interrupts/timeouts

This commit is contained in:
Jeff 2016-09-26 20:34:31 -07:00 • committed by Jeff Parsons
commit b2294e2293
8 changed files with 332 additions and 321 deletions

View file

@ -44,7 +44,7 @@ l.Ea=function(a,b){if(!b){if(a&&this.restore){nc(this);if(!this.restore(a))retur
function Ac(a){void 0===a.ub&&(a.ub=0);void 0===a.hb&&(a.hb=-1);void 0===a.ib&&(a.ib=-1);a.C.fb=0<=a.ub&&0<a.hb;a.C.fb&&(a.tb=0,a.O=a.ub-a.M)}function Dc(a,b){if(a.C.fb){var c=!1;a.tb=a.tb+a.yc()|0;a.O-=b;0>=a.O&&(a.O+=a.hb,c=!0);0<=a.ib&&a.ib<=Ec(a)&&(a.hb=a.ib=-1,Ac(a),a.qa(),c=!0);c&&a.g(Ec(a)+" cycles: checksum="+t(a.tb))}}
l.pa=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.N[b]=c;a=!0;break;case "run":this.N[b]=c;c.onclick=function(){var a;if(a=d.B)if(a=d.B,a.C.xa)a=!0;else{var b=null,c,h=bb(a.id);for(c=0;c<h.length&&(b=h[c],b===a||b.C.ready);c++);if(c==h.length)for(c=0;c<h.length&&(b=h[c],b===a||b.C.xa);c++);c==h.length&&(b=a);w("The "+b.type+" component ("+b.id+") is not "+(b.C.ready?"powered yet":"ready yet"+(b.Eb?" (waiting for notification)":""))+".");a=!1}a&&(d.C.Aa?d.qa():d.bb())};
a=!0;break;case "speed":this.N[b]=c;a=!0;break;case "setSpeed":this.N[b]=c,c.onclick=function(){Fc(d,d.Ra<<1,!0)},c.textContent=this.ab.toFixed(2)+"Mhz",a=!0}return a};function Gc(a,b,c){a.M+=b;c&&(a.L=a.b=0)}function Hc(a,b){var c=1;b&&1<a.Ra&&a.J&&(c=a.J/a.ha);a.wa=Math.round(1E3/30);a.fa=Math.floor(a.Y/30*c);b||(a.P=a.fa);a.ja=0}function Ec(a){return a.M+a.G+a.L-a.b}function nc(a){a.J=0;a.za=0;a.M=a.G=a.L=a.b=0;Ac(a);Fc(a,1)}
function Fc(a,b,c){var d=!1;if(void 0!==b){.8>a.J/a.ab?b=1:d=!0;a.Ra=b;b=a.ha*a.Ra;if(a.ab!=b){a.ab=b;b=a.ab.toFixed(2)+"Mhz";var e=a.N.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.B&&a.B.xb()}Gc(a,a.G);a.G=0;a.D=pa();a.K=0;Hc(a);return d}function Ic(a,b){var c=a.w.length;a.w.push([-1,b]);return c}function Jc(a,b,c){0<=b&&b<a.w.length&&(c*=a.Y*a.Ra/1E3,a.w[b][0]=c)}function Kc(a){a.L-=a.b;a.b=0}
function Fc(a,b,c){var d=!1;if(void 0!==b){.8>a.J/a.ab?b=1:d=!0;a.Ra=b;b=a.ha*a.Ra;if(a.ab!=b){a.ab=b;b=a.ab.toFixed(2)+"Mhz";var e=a.N.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.B&&a.B.xb()}Gc(a,a.G);a.G=0;a.D=pa();a.K=0;Hc(a);return d}function Ic(a,b){var c=a.w.length;a.w.push([-1,b]);return c}function Jc(a,b,c){0<=b&&b<a.w.length&&0>a.w[b][0]&&(c*=a.Y*a.Ra/1E3,a.w[b][0]=c)}function Kc(a){a.L-=a.b;a.b=0}
l.bb=function(a){if(ib(this,!0)){if(!this.C.Aa){Fc(this);this.B&&this.B.start(this.D,Ec(this));this.C.Aa=!0;this.C.Sb=!0;this.I&&this.I.start();var b=this.N.run;b&&(b.textContent="Halt");this.B&&(this.B.Ja(!0),a&&this.B.xb(!0))}this.ja>=this.Y&&Hc(this,!0);this.ba=0;this.ea=pa();this.K&&(a=this.ea-this.K,a>this.wa&&(this.D+=a,this.D>this.ea&&(this.D=this.ea)));try{do{for(var c=this.C.fb?1:this.fa,d=this.w.length-1;0<=d;d--){var e=this.w[d];0>e[0]||c>e[0]&&(c=e[0])}this.kb(c);var f=this.L-this.b;a=
f;for(var g=this.w.length-1;0<=g;g--){var h=this.w[g];0>h[0]||(h[0]-=a,0>=h[0]&&(h[0]=-1,h[1]()))}this.ba+=f;this.G+=f;Gc(this,0,!0);Dc(this,f);this.P-=f;if(0>=this.P){this.P+=this.fa;15<=++this.za&&(this.B&&this.B.Ja(),this.za=0);break}}while(this.C.Aa)}catch(k){this.qa();Cc(this);this.B&&this.B.stop(pa(),Ec(this));ib(this,!1);nb(this,k.stack||k.message);return}c=setTimeout;d=this.Fa;this.K=pa();e=this.wa;this.ba&&(e=Math.round(e*this.ba/this.fa));e-=this.K-this.ea;if(f=this.K-this.D)this.J=Math.round(this.G/
(10*f))/100,864E5<=f&&(this.M=0,Fc(this));if(0>e||this.J<this.ab)-1E3>e&&(this.D-=e),e=0;this.ja+=this.ba;this.K+=e;c(d,e)}else Cc(this),this.B&&this.B.stop(pa(),Ec(this))};l.kb=function(){return 0};l.qa=function(a){jb(this,!0);Kc(this);Gc(this,this.G);this.G=0;if(this.C.Aa){this.C.Aa=!1;this.I&&this.I.stop();var b=this.N.run;b&&(b.textContent="Run")}this.C.complete=a};function Cc(a,b){if(a.B){for(var c=a.B,d=0;d<c.G.length;d++)Lc(c.G[d],b);a.B.Ja(b)}}