Fixed a double-trap MMU bug (both src and dst operands triggered a trap, but since the latter was an abort, the former needed to be ignored)

This commit is contained in:
Jeff 2016-11-17 16:21:13 -08:00 • committed by Jeff Parsons
commit 05c2f0ebfe
4 changed files with 47 additions and 37 deletions

View file

@ -117,17 +117,17 @@ k.ee=function(){if(this.A.W){this.Jb>=this.nb&&Bd(this,!0);this.Ma=0;this.lb=Ba(
return}if(this.A.W){a=setTimeout;b=this.Fc;this.ba=Ba();var c=this.Cc;this.Ma&&(c=Math.round(c*this.Ma/this.pb));var c=c-(this.ba-this.lb),d=this.ba-this.T;d&&(this.na=Math.round(this.X/(10*d))/100,864E5<=d&&(this.ja=0,Ad(this)));if(0>c||this.na<this.qb)-1E3>c&&(this.T-=c),c=0;this.Jb+=this.Ma;this.ba+=c;a(b,c)}}};
k.jb=function(a){if(yb(this))return!1;if(this.A.W)return this.j(this.toString()+" busy"),!1;Ad(this);this.A.W=!0;this.A.bc=!0;var b=this.G.run;b&&(b.textContent="Halt");this.C&&(a&&this.C.ub(!0),this.C.start(this.T,zd(this)));setTimeout(this.Fc,0);return!0};k.kb=function(){return 0};k.da=function(a){var b=!1;if(this.A.W){Cd(this);ec(this,this.X);this.X=0;this.A.W=!1;if(b=this.G.run)b.textContent="Run";this.C&&this.C.stop(Ba(),zd(this));b=!0}this.A.complete=a;return b};
function Ed(a){this.Xa=+a.model||1170;this.Ac=a.addrReset||0;sd.call(this,a,6666667);this.decode=1120==this.Xa?Fd.bind(this):Gd.bind(this);Hd(this);this.M=0;this.P=null;this.A.complete=!1}z(Ed,sd);k=Ed.prototype;k.reset=function(){this.status("model "+this.Xa);this.A.W&&this.da();Hd(this);vd(this);this.A.error=!1;this.parent.reset.call(this)};
function Hd(a){a.U=65536;a.V=32768;a.$=65535;a.Z=32768;a.N=15;a.u=[0,0,0,0,0,0,0,a.Ac];a.Za=[0,0,0,0,0,0];a.La=[0,0,0,0];a.B=0;a.mb=0;a.$c=[4,2,0,1];a.O=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[65535,65535,65535,65535,65535,65535,65535,65535],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];a.ha=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];a.Tb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0];a.Jc=[0,0,0,0,0,0,0,0];a.Ic=0;a.J=0;a.D=a.H=0;a.g=a.f=a.yb=0;a.Aa=-1;Rb(a)}function Rb(a){a.Da=0;a.Kb=0;a.Mb=0;a.Ta=0;a.ua=0;a.Sb=0;a.sb=255;a.L=0;a.bb=0;a.Ea=262143;a.Nb=0;a.pa=0;a.P=null;a.v&&Id(a)}function Id(a){a.L?(a.S=65536,a.yc=a.Ta&16?4186112:253952,a.aa=a.Yc,a.sa=a.be,a.Vb=a.Ue,vc(a.v,a.Ta&16?22:18)):(a.S=0,a.yc=57344,a.aa=a.Xc,a.sa=a.Hc,a.Vb=a.Oc,vc(a.v,16))}function Uc(a){var b=a.Da;b&57344||(b=b&-3199|a.bb<<5|a.mb<<1);return b}
function Vc(a,b){b&=-3073;if(a.Da!=b){b&57344&&!(a.Da&57344)&&(a.Kb=a.pa>>16&65535,a.Mb=a.pa&65535);a.Da=b;a.bb=b>>5&3;a.mb=b>>1&15;var c=0;b&257&&(c=4,b&1&&(c|=2));a.L!=c&&(a.L=c,Id(a))}}function Wc(a){a.Da&57344||(a.Kb=a.pa>>16&65535);a=a.Kb;a&65280&&(a=(a<<8|a>>8)&65535);return a}function Xc(a){a.Da&57344||(a.Mb=a.pa&65535);return a.Mb}function Yc(a,b){1170>a.Xa&&(b&=-49);a.Ta!=b&&(a.Ta=b,a.Ea=b&16?4194303:262143,Id(a))}k.vc=function(){return 0};
k.save=function(){var a=new O(this);a.set(0,[]);a.set(1,[this.ja,this.gb]);a.set(2,Ec(this.v));return a.data()};k.restore=function(a){var b=a[1];this.ja=b[1];Ad(this,b[3]);a:{b=this.v;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.I){for(var f=0,g=Array(b.I),h=0;h<e.length-1;)for(var l=e[h++],m=e[h++];l--;)g[f++]=m;e=g}f=b.Y[d];if(!f||!f.restore(e)){q("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};function Jd(a){return a.U&65536?1:0}
function Kd(a){return a.V&32768?2:0}function Ld(a){return a.$&65535?0:4}function Md(a){return a.Z&32768?8:0}function Nd(a){var b=a.u[7];a.pa=b;var c=a.sa(b);a.u[7]=b+2&65535;return c}function Od(a,b){var c=a.u[7];a.u[7]=c+b&65535;return c}function Q(a,b){a.u[7]=b&65535}function Rc(a,b){return{ge:a,Bb:b,next:null}}function Pd(a,b){var c=a.P;if(c==b)a.P=b.next;else for(;c;){a=c.next;if(a==b){c.next=a.next;break}c=a}}
function Hd(a){a.U=65536;a.V=32768;a.$=65535;a.Z=32768;a.N=15;a.u=[0,0,0,0,0,0,0,a.Ac];a.Za=[0,0,0,0,0,0];a.La=[0,0,0,0];a.B=0;a.mb=0;a.$c=[4,2,0,1];a.O=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];a.ha=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];a.Tb=
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];a.Jc=[0,0,0,0,0,0,0,0];a.Ic=0;a.J=0;a.D=a.H=0;a.g=a.f=a.yb=0;a.Aa=-1;Rb(a)}function Rb(a){a.Da=0;a.Kb=0;a.Mb=0;a.Ta=0;a.ua=0;a.Sb=0;a.sb=255;a.L=0;a.bb=0;a.Ea=262143;a.Nb=0;a.pa=0;a.P=null;a.v&&Id(a)}function Id(a){a.L?(a.S=65536,a.yc=a.Ta&16?4186112:253952,a.aa=a.Yc,a.sa=a.be,a.Vb=a.Ue,vc(a.v,a.Ta&16?22:18)):(a.S=0,a.yc=57344,a.aa=a.Xc,a.sa=a.Hc,a.Vb=a.Oc,vc(a.v,16))}
function Uc(a){var b=a.Da;b&57344||(b=b&-3199|a.bb<<5|a.mb<<1);return b}function Vc(a,b){b&=-3073;if(a.Da!=b){b&57344&&!(a.Da&57344)&&(a.Kb=a.pa>>16&65535,a.Mb=a.pa&65535);a.Da=b;a.bb=b>>5&3;a.mb=b>>1&15;var c=0;b&257&&(c=4,b&1&&(c|=2));a.L!=c&&(a.L=c,Id(a))}}function Wc(a){a.Da&57344||(a.Kb=a.pa>>16&65535);a=a.Kb;a&65280&&(a=(a<<8|a>>8)&65535);return a}function Xc(a){a.Da&57344||(a.Mb=a.pa&65535);return a.Mb}function Yc(a,b){1170>a.Xa&&(b&=-49);a.Ta!=b&&(a.Ta=b,a.Ea=b&16?4194303:262143,Id(a))}
k.vc=function(){return 0};k.save=function(){var a=new O(this);a.set(0,[]);a.set(1,[this.ja,this.gb]);a.set(2,Ec(this.v));return a.data()};k.restore=function(a){var b=a[1];this.ja=b[1];Ad(this,b[3]);a:{b=this.v;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.I){for(var f=0,g=Array(b.I),h=0;h<e.length-1;)for(var l=e[h++],m=e[h++];l--;)g[f++]=m;e=g}f=b.Y[d];if(!f||!f.restore(e)){q("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
function Jd(a){return a.U&65536?1:0}function Kd(a){return a.V&32768?2:0}function Ld(a){return a.$&65535?0:4}function Md(a){return a.Z&32768?8:0}function Nd(a){var b=a.u[7];a.pa=b;var c=a.sa(b);a.u[7]=b+2&65535;return c}function Od(a,b){var c=a.u[7];a.u[7]=c+b&65535;return c}function Q(a,b){a.u[7]=b&65535}function Rc(a,b){return{ge:a,Bb:b,next:null}}function Pd(a,b){var c=a.P;if(c==b)a.P=b.next;else for(;c;){a=c.next;if(a==b){c.next=a.next;break}c=a}}
function Ic(a,b){if(b!=a.P){var c=a.P;if(!c||c.Bb<=b.Bb)b.next=c,a.P=b;else{do{var d=c.next;if(!d||d.Bb<=b.Bb){b.next=d;c.next=b;break}c=d}while(c)}}a.J|=1}function ke(a){return a.J&64?(a.wa(168,64,-5),!0):a.J&32?(a.wa(4,32,-4),!0):a.J&16?(a.wa(12,16,-6),!0):!1}function $c(a){return a.N=a.N&63728|Md(a)|Ld(a)|Kd(a)|Jd(a)}
function ad(a,b){a.Z=b<<12;a.$=~b&4;a.V=b<<14;a.U=b<<16;if((b^a.N)&2048)for(var c=a.Za.length;0<=--c;){var d=a.u[c];a.u[c]=a.Za[c];a.Za[c]=d}a.B=b>>14&3;c=a.N>>14&3;a.B!=c&&(a.La[c]=a.u[6],a.u[6]=a.La[a.B]);a.N=b;a.J|=2}function Zc(a,b){if(b&=65024){var c=b>>9;do b+=34;while(c>>=1)}a.Sb=b;a.J|=2}function R(a,b){a.J&128||(a.Z=a.$=b,a.V=0)}function le(a,b,c){a.J&128||(a.Z=a.$=a.U=b,a.V=c||0)}function me(a,b,c,d){a.J&128||(a.Z=a.$=a.U=b,a.V=(c^b)&(d^b))}
function ne(a,b){a.J&128||(a.Z=a.$=a.U=b,a.V=a.Z^a.U>>1)}function oe(a,b,c,d){a.J&128||(a.Z=a.$=a.U=b,a.V=(c^d)&(d^b))}k.wa=function(a,b,c){if(!this.M){0>this.Aa?this.Aa=$c(this):this.B||(a=4,this.ua|=4,this.u[6]=4,c=-3);this.pa=a;this.B=0;var d=this.sa(a|this.S),e=this.sa(a+2&65535|this.S);ad(this,e&-12289|this.Aa>>2&12288);pe(this,this.Aa);pe(this,this.u[7]);Q(this,d);this.J&=~(b|18);this.J|=9;this.Aa=-1;this.md=a;this.ld=c;if(-3<=c)throw a;}};
function qe(a){var b=re(a),c=re(a)&-1793;a.N&49152&&(c=c&-225|a.N&63712);Q(a,b);ad(a,c);a.J&=-17}function Dc(a,b){var c=b>>13&31;31>c&&(b=a.Ta&32?a.Tb[c]+(b&8190)&4194302:b&-3932161);return b}
function se(a,b,c){var d,e,f;if(!(c&a.L))return f=b&65535,57344<=f&&(f|=a.yc),f;d=b>>13;a.Ta&a.$c[a.B]||(d&=7);e=a.O[a.B][d];f=(a.ha[a.B][d]<<6)+(b&8191)&a.Ea;var g=0;switch(e&7){case 1:g=4096;case 2:e|=128;c&4&&(g=8192);break;case 4:g=4096;case 5:c&4&&(g=4096);case 6:e|=c&4?192:128;break;default:g=32768}32512!=(e&32520)&&(e&8?e&32512&&(b&8128)<(e>>2&8128)&&(g|=16384):(b&8128)>(e>>2&8128)&&(g|=16384));a.O[a.B][d]=e;if(f!=(4194170&a.Ea)||a.B)a.bb=a.B,a.mb=d;g&&(g&57344&&(0<=a.Aa&&(g|=128),a.Da&57344||
(g|=a.bb<<5|a.mb<<1,Vc(a,a.Da&-61695|g),a.wa(168,0,-1))),a.Da&61440||!(f<(4191360&a.Ea)||f>(4194239&a.Ea))||(a.Da|=4096,a.Da&512&&(a.J|=64)));return f}function te(a,b){return a.v.Lb(b)}function re(a){var b=a.sa(a.u[6]|a.S);a.u[6]=a.u[6]+2&65535;return b}function pe(a,b){var c=a.u[6]-2&65535;a.u[6]=c;a.pa=a.pa&65535|(a.pa&-65536)<<8|16121856;ue(a,0,c);a.Vb(c,b)}function ue(a,b,c){!a.B&&c<=a.sb&&(b||4<c)&&(1145<=a.Xa&&c<=a.sb-32?(a.ua|=4,a.u[6]=4,a.wa(4,0,-3)):(a.ua|=8,a.J|=32))}
(g|=a.bb<<5|a.mb<<1,Vc(a,a.Da&-61695|g),a.wa(168,64,-1))),a.Da&61440||!(f<(4191360&a.Ea)||f>(4194239&a.Ea))||(a.Da|=4096,a.Da&512&&(a.J|=64)));return f}function te(a,b){return a.v.Lb(b)}function re(a){var b=a.sa(a.u[6]|a.S);a.u[6]=a.u[6]+2&65535;return b}function pe(a,b){var c=a.u[6]-2&65535;a.u[6]=c;a.pa=a.pa&65535|(a.pa&-65536)<<8|16121856;ue(a,0,c);a.Vb(c,b)}function ue(a,b,c){!a.B&&c<=a.sb&&(b||4<c)&&(1145<=a.Xa&&c<=a.sb-32?(a.ua|=4,a.u[6]=4,a.wa(4,0,-3)):(a.ua|=8,a.J|=32))}
function ve(a,b,c,d){var e,f,g=d&8?0:a.S;switch(b){case 0:return a.wa(4,0,-2),0;case 1:return 6==c&&d&4&&ue(a,b,a.u[6]),a.b-=3,7==c?a.u[c]:a.u[c]|g;case 2:f=2;e=a.u[c];7!=c&&(e|=g,6>c&&d&1&&(f=1));a.b-=3;break;case 3:f=2;e=a.u[c];7!=c&&(e|=g);e=a.sa(e);e|=g;a.b-=7;break;case 4:f=-2;6>c&&d&1&&(f=-1);e=a.u[c]+f&65535;7!=c&&(e|=g);a.b-=4;break;case 5:f=-2;e=a.u[c]-2&65535;7!=c&&(e|=g);e=a.sa(e)|g;a.b-=8;break;case 6:return e=a.sa(Od(a,2)),e=e+a.u[c]&65535|g,a.b-=6,e;case 7:return e=a.sa(Od(a,2)),e=e+
a.u[c]&65535,e=a.sa(e|a.S)|g,a.b-=10,e}a.u[c]=a.u[c]+f&65535;a.pa=a.pa&65535|(a.pa&-65536)<<8|(f<<3&248|c)<<16;6==c&&0>f&&ue(a,b,a.u[6]);return e}k.Zb=function(a){if(!this.L)return this.v.Zb(a);this.M++;a=te(this,se(this,a,3));this.M--;return a};k.fb=function(a){if(!this.L)return this.v.fb(a);this.M++;a=this.Hc(se(this,a,2));this.M--;return a};k.tb=function(a,b){this.L?(this.M++,a=se(this,a,5),a&1&&this.b--,this.v.Eb(a,b),this.M--):this.v.tb(a,b)};
k.Fb=function(a,b){this.L?(this.M++,this.Oc(se(this,a,4),b),this.M--):this.v.Fb(a,b)};k.Xc=function(a,b,c){return ve(this,a,b,c)};k.Yc=function(a,b,c){return se(this,ve(this,a,b,c),c)};k.Hc=function(a){return this.v.oa(this.Nb=a)};k.be=function(a){return this.v.oa(this.Nb=se(this,a,2))};k.Oc=function(a,b){this.v.ib(this.Nb=a,b&65535)};k.Ue=function(a,b){this.v.ib(this.Nb=se(this,a,4),b)};