v1.17.3: New flag handling in advance of 32-bit support

This commit is contained in:
Jeff Parsons 2015-03-16 18:14:46 -07:00 committed by jeffpar
commit 87f6fb6c7d
148 changed files with 7719 additions and 1581 deletions

View file

@ -8,7 +8,7 @@
<xsl:variable name="MACHINECLASS">pc</xsl:variable>
<xsl:variable name="APPCLASS">pcjs</xsl:variable>
<xsl:variable name="APPVERSION">1.17.2</xsl:variable>
<xsl:variable name="APPVERSION">1.17.3</xsl:variable>
<xsl:variable name="SITEHOST">www.pcjs.org</xsl:variable>
<xsl:template name="componentStyles">

View file

@ -745,7 +745,7 @@ b);a.Mc=[v(a.N),Fb(a.N),void 0];break;case "IP":B(a.N,b);a.Mc=[v(a.N),Fb(a.N),vo
case "V":b?Te(a.N):Ue(a.N);break;default:f=!0;if(80286<=a.N.wa)switch(f=!1,c){case "MS":Ze(a.N,b);break;case "TR":a.N.ab.load(b);break;default:f=!0}if(f){a.Q("unknown register: "+e);return}}Vc(a.N);a.Q("\nupdated registers:");c=!0}}a.Q((c?"":"\n")+sl(a,d));a.Mc=[v(a.N),Fb(a.N),void 0];cl(a,fl(a,a.Mc))}}function yl(a,b,c){var d="tr"==b;b=null!=c?parseInt(c,10):1;var e=1==b?0:1;Fa(b,function(){return fb(a,!0)&&a.ng(e,d,!1)},function(){Vc(a.N);fb(a,!1)})}
function cl(a,b,c,d){b=tl(a,b,1);if(null!=b[0]){void 0===d&&(d=1);var e=[a.qp,b[1],a.ea.Uh],e=256;if(void 0!==c){e=tl(a,c,1);if(null==e[0]||e[0]<b[0])return;e=e[0]-b[0];if(256<e){a.Q("range too large");return}d=-1}var f=b[0]!=a.Mc[0];c=0;for(var g=!0;0<e&&d--;){var h=a.La(b),t=b[2],r=gb(a,!1)||a.tc?a.pd:null;g&&(b[4]=4==a.N.Tc,b[5]=4==a.N.ne,g=!1);38==h||46==h||54==h||62==h||100==h||101==h||102==h||103==h||240==h||242==h||243==h?(102==h?b[4]=!b[4]:103==h&&(b[5]=!b[5]),d||d++,r=null):g=!0;var h=null!=
r?"cycles":null,C=nl(a,b);if(C[0]){var K=C[0]+":",f=!1;C[2]&&(K+=" "+C[2]);a.Q(K)}f&&a.Q();C[3]&&(h=C[3],r=null);f=ll(a,b,h,r);a.Q(f);a.Mc=b;e-=b[2]-t;f=!1;c++}}}function Zk(a,b,c){if(c)if(b){0>a.Vc&&a.Oc.length&&(a.Vc=0);if(0>a.Vc||b!=a.Oc[a.Vc])a.Oc.splice(0,0,b),a.Vc=0;a.Vc--}else b=a.Oc[a.Vc+1];a=b?b.split(0<=b.indexOf("|")?"|":";"):[""];for(var d in a)a[d]=ma(a[d]);return a}
function Hk(a,b){var c=!0;try{if(b.length||(a.Nf?(a.Q("ended assemble @"+fl(a,a.Pe)),a.Mc=a.Pe,a.Nf=!1):b="?"),b=b.toLowerCase(),ib(a)&&0<b.length){if(a.Nf)b="a "+fl(a,a.Pe)+" "+b;else{var d,e,f;switch(b){case "reset":return a.ya&&a.ya.reset(),!0;case "ver":return a.Q("PCjs version 1.17.2 ("+a.N.wa+",RELEASE,NOPREFETCH"+(kb?",TYPEDARRAYS":",LONGARRAYS")+",NOBACKTRACK)"),!0;default:for(e=b.charAt(0),f=1;f<b.length;f++){d=b.charAt(f);if(" "==d)break;if("r"==e||"a">d||"z"<d){b=b.substring(0,f)+" "+b.substring(f);
function Hk(a,b){var c=!0;try{if(b.length||(a.Nf?(a.Q("ended assemble @"+fl(a,a.Pe)),a.Mc=a.Pe,a.Nf=!1):b="?"),b=b.toLowerCase(),ib(a)&&0<b.length){if(a.Nf)b="a "+fl(a,a.Pe)+" "+b;else{var d,e,f;switch(b){case "reset":return a.ya&&a.ya.reset(),!0;case "ver":return a.Q("PCjs version 1.17.3 ("+a.N.wa+",RELEASE,NOPREFETCH"+(kb?",TYPEDARRAYS":",LONGARRAYS")+",NOBACKTRACK)"),!0;default:for(e=b.charAt(0),f=1;f<b.length;f++){d=b.charAt(f);if(" "==d)break;if("r"==e||"a">d||"z"<d){b=b.substring(0,f)+" "+b.substring(f);
break}}}}var g=b.split(" ");switch(g[0].charAt(0)){case "a":var h=tl(a,g[1],1);if(null!=h[0])if(a.Pe=h,void 0===g[2])a.Q("begin assemble @"+fl(a,h)),a.Nf=!0,Vc(a.N);else{var t;a.Q("not supported yet");t=[];if(t.length){for(var r=0;r<t.length;r++)a.sd(h,t[r],1);a.Q(ll(a,a.Pe))}}break;case "b":a:{var C=g[1],K=g[0].charAt(1);if(K&&"?"!=K)if("l"==K)r=0,r+=kl(a,a.yc),r+=kl(a,a.ie),(r+=kl(a,a.dd))||a.Q("no breakpoints");else if(void 0===C)a.Q("missing breakpoint address");else{r=[];if("*"!=C&&(r=tl(a,C,
1),null==r[0]))break a;C=null==r[0]?C:m(r[0]);"c"==K?null==r[0]?(Ek(a),a.Q("all breakpoints cleared")):il(a,a.yc,r,!0)||il(a,a.ie,r,!0)||il(a,a.dd,r,!0)||a.Q("breakpoint missing: "+fl(a,r)):"i"==K?a.Q("breakpoint "+(ac(a.ea,r[0])?"enabled":"cleared")+": port "+C+" (input)"):"o"==K?a.Q("breakpoint "+(ec(a.ea,r[0])?"enabled":"cleared")+": port "+C+" (output)"):null!=r[0]&&("p"==K?a.me(a.yc,r):"r"==K?a.me(a.ie,r):"w"==K?a.me(a.dd,r):a.Q("unknown breakpoint command: "+K))}else a.Q("\nbreakpoint commands:"),
a.Q("\tbi [p]\ttoggle break on input port [p]"),a.Q("\tbo [p]\ttoggle break on output port [p]"),a.Q("\tbp [a]\tset exec breakpoint at addr [a]"),a.Q("\tbr [a]\tset read breakpoint at addr [a]"),a.Q("\tbw [a]\tset write breakpoint at addr [a]"),a.Q("\tbc [a]\tclear breakpoint at addr [a]"),a.Q("\tbl\tlist all breakpoints")}break;case "c":a.Ng&&(a.Ng.value="");break;case "d":a:{var D=g[0],r=g[1],F=g[2],N;if("?"==r){r="";for(N in Ok)a.$i[N]&&(r&&(r+=","),r+=N);r+=",state,symbols";a.Q("\ndump commands:");
@ -763,21 +763,21 @@ De.prototype={constructor:De,set:function(a,b){try{this[this.id][a]=b}catch(c){}
a:JSON.stringify(a)},clear:function(a){Bl(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(f){}b.splice(c,1);c=0}},la:function(a){return this.W?this.W.la(null==a?8388608:a|8388608):!1},Ua:function(a){this.W&&this.W.message(a)}};function Bl(a,b){a[a.id]={};b&&a.set("parms",b);a.Bj=!1}
function Cl(a){var b=!0;if(Ba()){var c=JSON.stringify(a[a.id]);Da(a.key,c)||(xa("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}
function Dl(a,b,c){n.call(this,"Computer",a,Dl,33554432);this.aa.Xb=!1;this.lf=a.buswidth;this.Yc=El;this.zh=null;this.ji=!1;this.url=b?b.url:null;this.Gq=(Math.random()+.1).toString(36).substr(2,12);this.Zc=Fl(this);if(this.N=ab("CPU",this.id)){this.W=ab("Debugger",this.id);this.ea=new Rb({id:this.Wl+".bus",buswidth:this.lf},this.N,this.W);var d,e=Ya(this.id);if((this.be=ab("Panel",this.id))&&this.be.Ng)for(b=0;b<e.length;b++)d=e[b],d.za=this.be.za,d.Q=this.be.Q,d.Ng=this.be.Ng;for(b=0;b<e.length;b++)d=
e[b],d.vc&&d.vc(this,this.ea,this.N,this.W);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.Li=d:this.Yc=parseInt(d,10));var f;if(a=Sa&&Sa.state||(f=!0,a.state))b=this.wn=a,f||(this.ji=!0,this.Yc=El),this.Yc&&(this.Pi=new De(this,"1.17.2"),this.Pi.load()?b=null:delete this.Pi);!b&&this.Yc&&(f=null,this.Zc&&(f=wa()+"/api/v1/user?req=load&user="+this.Zc+"&state="+Al(this,"1.17.2")),b=f)&&(this.ji=!0);b?va(b,!0,null,this,this.Dp):hb(this);c||Gl(this,this.Ei)}else xa("Unable to find CPU component")}
e[b],d.vc&&d.vc(this,this.ea,this.N,this.W);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.Li=d:this.Yc=parseInt(d,10));var f;if(a=Sa&&Sa.state||(f=!0,a.state))b=this.wn=a,f||(this.ji=!0,this.Yc=El),this.Yc&&(this.Pi=new De(this,"1.17.3"),this.Pi.load()?b=null:delete this.Pi);!b&&this.Yc&&(f=null,this.Zc&&(f=wa()+"/api/v1/user?req=load&user="+this.Zc+"&state="+Al(this,"1.17.3")),b=f)&&(this.ji=!0);b?va(b,!0,null,this,this.Dp):hb(this);c||Gl(this,this.Ei)}else xa("Unable to find CPU component")}
Xa(n,Dl);var El=0;k=Dl.prototype;k.Uf=function(){return this.Gq};k.Ae=function(){return this.Zc?this.Zc:""};k.Dp=function(a,b,c){c?(this.Li=null,this.ji=!1,this.za("Unable to load machine state from server (error "+c+(b?": "+ma(b):"")+")")):this.zh=b;hb(this)};function Gl(a,b,c){for(var d=Ya(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!ib(f)){ib(f,function(){Gl(a,b,c)});return}}b.call(a,c)}
function Hl(a,b){var c=new De(a,"1.17.2","validate");if(c.load()&&c.parse()){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.za("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
k.Ei=function(a){void 0===a&&(a=this.Yc||(this.zh?1:El));var b=!1,c=!1;this.Ll=!1;var d=this.Pi||new De(this,"1.17.2");if(-1==a)b=!0;else if(a>El){if(d.load(this.zh)){this.uf=new De(this,"1.17.2","failsafe");this.uf.load()&&(Il(this,d),a=2,Bl(this.uf));this.uf.set("timestamp",qa());Cl(this.uf);var e=this.Yc&&!this.ji;if(1==a||za("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=d.parse()){var f=d.get("code"),g=d.get("data");f&&("ok"==f?d.load(g):("error"==
function Hl(a,b){var c=new De(a,"1.17.3","validate");if(c.load()&&c.parse()){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.za("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
k.Ei=function(a){void 0===a&&(a=this.Yc||(this.zh?1:El));var b=!1,c=!1;this.Ll=!1;var d=this.Pi||new De(this,"1.17.3");if(-1==a)b=!0;else if(a>El){if(d.load(this.zh)){this.uf=new De(this,"1.17.3","failsafe");this.uf.load()&&(Il(this,d),a=2,Bl(this.uf));this.uf.set("timestamp",qa());Cl(this.uf);var e=this.Yc&&!this.ji;if(1==a||za("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=d.parse()){var f=d.get("code"),g=d.get("data");f&&("ok"==f?d.load(g):("error"==
f&&"no machine state"!=g?(this.za("Error: "+g),"unable to verify user"==g&&(Da("user",""),this.Zc=null)):this.Q(f+": "+g),Bl(d),d.load()?(c=d.parse(),e=!0):c=!1))}e&&Hl(this,c?d:null)}else 2==a&&d.clear()}else Hl(this);delete this.zh;delete this.Pi}e=Ya(this.id);for(f=0;f<e.length;f++)g=e[f],g!==this&&g!=this.N&&(c=Jl(this,g,d,b,c));b=[d,a,c];-1!=a?Gl(this,this.Dl,b):this.Dl(b)};
function Jl(a,b,c,d,e){if(!b.aa.Xb){b.aa.Xb=!0;if(b.cc){var f=null;e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.cc(f,d)&&f&&(xa("Unable to restore state for "+b.type),a.wn&&!a.zh?(c.clear(),a.Yc=El,window&&window.location.reload()):a.Ll=!0,b.cc(null),e=!1)}if(!d&&b.Jg)for(a=b.Jg.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
k.Dl=function(a){var b=a[0],c=0>a[1];a=a[2];this.aa.Xb=!0;this.Il||(this.Q("PCjs v1.17.2\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Il=!0);this.N&&(Jl(this,this.N,b,c,a),Wc(this.N));this.Ll&&(Il(this,b),b.clear());!c&&this.uf&&(this.uf.clear(),delete this.uf)};
function Il(a,b){if(za("There may be a problem with your PCjs machine.\n\nTo help us diagnose it, click OK to send this PCjs machine state to http://www.pcjs.org.")){var c=a.Ae(),d=b.toString(),e={app:"PCjs",ver:"1.17.2"};e.url=a.url;e.user=c;e.type="bug";e.data=d;va("http://www.pcjs.org/api/v1/report",!0,e)}}
function zl(a,b,c){var d,e="none",f=new De(a,"1.17.2"),g=new De(a,"1.17.2","validate"),h=qa();g.set("timestamp",h);f.set("timestamp",h);f.set("version","1.17.2");f.set("url",window?window.location.href:null);f.set("browser",window?window.navigator.userAgent:"");a.N&&a.N.bc&&(c&&a.N.ib(),d=a.N.bc(b,c),"object"===typeof d&&f.set(a.N.id,d),c&&(a.N.aa.Xb=!1,!1===d&&(e=null)));for(var h=Ya(a.id),t=0;t<h.length;t++){var r=h[t];r.aa.Xb&&(r.bc&&(d=r.bc(b,c),"object"===typeof d&&f.set(r.id,d)),c&&(r.aa.Xb=
k.Dl=function(a){var b=a[0],c=0>a[1];a=a[2];this.aa.Xb=!0;this.Il||(this.Q("PCjs v1.17.3\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Il=!0);this.N&&(Jl(this,this.N,b,c,a),Wc(this.N));this.Ll&&(Il(this,b),b.clear());!c&&this.uf&&(this.uf.clear(),delete this.uf)};
function Il(a,b){if(za("There may be a problem with your PCjs machine.\n\nTo help us diagnose it, click OK to send this PCjs machine state to http://www.pcjs.org.")){var c=a.Ae(),d=b.toString(),e={app:"PCjs",ver:"1.17.3"};e.url=a.url;e.user=c;e.type="bug";e.data=d;va("http://www.pcjs.org/api/v1/report",!0,e)}}
function zl(a,b,c){var d,e="none",f=new De(a,"1.17.3"),g=new De(a,"1.17.3","validate"),h=qa();g.set("timestamp",h);f.set("timestamp",h);f.set("version","1.17.3");f.set("url",window?window.location.href:null);f.set("browser",window?window.navigator.userAgent:"");a.N&&a.N.bc&&(c&&a.N.ib(),d=a.N.bc(b,c),"object"===typeof d&&f.set(a.N.id,d),c&&(a.N.aa.Xb=!1,!1===d&&(e=null)));for(var h=Ya(a.id),t=0;t<h.length;t++){var r=h[t];r.aa.Xb&&(r.bc&&(d=r.bc(b,c),"object"===typeof d&&f.set(r.id,d)),c&&(r.aa.Xb=
!1,!1===d&&(e=null)))}e&&(c?(h=d=!1,b?(a.Zc&&Kl(a,a.Zc,f.toString()),Cl(g)&&Cl(f)||(e=null,d=h=!0)):a.Yc&&(d=!0,h=3==a.Yc),d&&f.clear(h)):e=f.toString());c&&(a.aa.Xb=!1);return e}k.reset=function(){this.ea&&this.ea.reset&&(this.Ua("Resetting "+this.ea.type),this.ea.reset());for(var a=Ya(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.ea&&c.reset&&(this.Ua("Resetting "+c.type),c.reset())}};
k.start=function(a,b){for(var c=Ya(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};k.stop=function(a,b){for(var c=Ya(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
k.Cb=function(a,b,c){var d=this;switch(b){case "save":return this.na[b]=c,c.onclick=function(){var a=Fl(d,!0);if(a){var b=!(!d.Yc||d.Li),c=zl(d,b);b?Kl(d,a,c):d.za("Resume disabled, machine state not saved")}},!0;case "reset":return this.na[b]=c,c.onclick=function(){ad(d)},!0}return!1};
function Fl(a,b){var c=a.Zc;c||(c=Ca("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("To save machine states on the pcjs.org server, you need a user ID (email support@pcjs.org).\n\nOnce you have an ID, enter it below.","")),c&&((c=Ll(a,c))||a.za("Your user ID has not been approved."))):b&&a.za("Browser local storage is not available"));return c}
function Ll(a,b){a.Zc=null;var c=va(wa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(Da("user",c.data),a.Zc=c.data)}catch(e){xa(e.message+" ("+d+")")}return a.Zc}
function Kl(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Al(a,"1.17.2");d.data=c;b=va(wa()+"/api/v1/user",!1,d);d=b[1];if(b[0]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[0]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.za("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.za(c),Da("user",""),a.Zc=null)}}
function Kl(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Al(a,"1.17.3");d.data=c;b=va(wa()+"/api/v1/user",!1,d);d=b[1];if(b[0]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[0]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.za("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.za(c),Da("user",""),a.Zc=null)}}
function ad(a){if(a.Yc&&!a.Li){var b=za("Click OK to save changes to this PCjs machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");zl(a,b,!0);!b&&a.wn?window&&window.location.reload():(b||(a.Cj=!0),a.Ei(El),a.Cj=!1)}else a.reset(),a.N&&Wc(a.N)}function rb(a,b,c){a=Ya(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}
La(function(){for(var a=db(window.document,"pcjs-machine"),b=0;b<a.length;b++)for(var c=a[b],d=bb(c),c=db(c,"pcjs","computer"),e=0;e<c.length;e++){var f=c[e],g=bb(f),g=new Dl(g,d,!0);cb(g,f);Gl(g,g.Ei)}});Ha.show.push(function(){for(var a=db(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=bb(a[b]);(c=ab("Computer",c.id))&&c.Il&&!c.aa.Xb&&c.Ei(-1)}});
Ha.exit.push(function(){for(var a=db(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=bb(a[b]);(c=ab("Computer",c.id))&&c.aa.Xb&&zl(c,!(!c.Yc||c.Li),!0)}});var Ml=0;function Nl(a,b,c,d,e,f){e("Loading "+a+"...");va(a,!0,null,null,function(g,h,t){t?(h||(h="unable to load "+a+" ("+t+")"),f(h,null)):Ol(h,a,b,c,d,e,f)})}
@ -785,6 +785,6 @@ function Ol(a,b,c,d,e,f,g){function h(a,f){if(f)g(f,null);else{if(c){var h=b;h&&
null,a=K.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);g(a,h)}}a?e?Sl(a,f,h):h(a,null):g("no data"+(b?" for file: "+b:""),null)}
function Sl(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");va(e,!0,null,null,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var t=h[0],r,C=/( [a-z]+=)(['"])(.*?)\2/g;r=C.exec(f);)t=0>t.indexOf(r[1])?t.replace(">",r[0]+">"):t.replace(new RegExp(r[1]+"(['\"])(.*?)\\1"),r[0]);h[0]!=t&&(g=g.replace(h[0],t))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],g);Sl(a,b,c)}})}else c(a,null)}
function Tl(a,b,c,d){function e(a){if(void 0===h){var b=g&&db(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ia(a))}function f(a){e("Error: "+a);t&&(--Ml||Na(!0));t=!1}var g,h,t=!0;Ml++;try{if(g=window.document.getElementById(a)){c||(c="/versions/pcjs/1.17.2/components.xsl");var r=function(d,h){if(h){var r=function(d,r){if(r)if(r)if(e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var t=h.transformNode(r);t?(g.outerHTML=t,--Ml||Na(!0)):f("transformNodeToObject failed")}else window.document.implementation&&
function Tl(a,b,c,d){function e(a){if(void 0===h){var b=g&&db(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ia(a))}function f(a){e("Error: "+a);t&&(--Ml||Na(!0));t=!1}var g,h,t=!0;Ml++;try{if(g=window.document.getElementById(a)){c||(c="/versions/pcjs/1.17.3/components.xsl");var r=function(d,h){if(h){var r=function(d,r){if(r)if(r)if(e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var t=h.transformNode(r);t?(g.outerHTML=t,--Ml||Na(!0)):f("transformNodeToObject failed")}else window.document.implementation&&
window.document.implementation.createDocument?(t=new XSLTProcessor,t.importStylesheet(r),(t=t.transformToFragment(h,window.document))?g.parentNode?(g.parentNode.replaceChild(t,g),--Ml||Na(!0)):f("invalid machine element: "+a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f("failed to load XSL file: "+c);else f(d)};h?Nl(c,null,null,!1,e,r):f("failed to load XML file: "+b)}else f(d)};"<"!=b.charAt(0)?Nl(b,a,d,!0,e,r):Ol(b,null,a,d,!1,e,r)}else f("missing machine element: "+
a)}catch(C){f(C.message)}return t}window.embedPC=function(a,b,c,d){Na(!1);return Tl(a,b,c,d)};window.enableEvents=Na;window.sendEvent=Pa;})();

View file

@ -644,21 +644,21 @@ Pd.prototype={constructor:Pd,set:function(a,b){try{this[this.id][a]=b}catch(c){}
a:JSON.stringify(a)},clear:function(a){tj(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(f){}b.splice(c,1);c=0}},$b:function(){}};function tj(a,b){a[a.id]={};b&&a.set("parms",b);a.Li=!1}
function uj(a){var b=!0;if(ra()){var c=JSON.stringify(a[a.id]);ta(a.key,c)||(m("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}
function vj(a,b,c){n.call(this,"Computer",a,vj);this.aa.Wb=!1;this.xf=a.buswidth;this.Jc=wj;this.Hg=null;this.th=!1;this.url=b?b.url:null;this.Ip=(Math.random()+.1).toString(36).substr(2,12);this.Kc=xj(this);if(this.S=Oa("CPU",this.id)){this.Ua=Oa("Debugger",this.id);this.fa=new xb({id:this.cl+".bus",buswidth:this.xf},this.S,this.Ua);var d,e=Ma(this.id);if((this.Bd=Oa("Panel",this.id))&&this.Bd.xi)for(b=0;b<e.length;b++)d=e[b],d.sa=this.Bd.sa,d.ic=this.Bd.ic,d.xi=this.Bd.xi;for(b=0;b<e.length;b++)d=
e[b],d.xc&&d.xc(this,this.fa,this.S,this.Ua);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.Yh=d:this.Jc=parseInt(d,10));var f;if(a=Fa&&Fa.state||(f=!0,a.state))b=this.Bm=a,f||(this.th=!0,this.Jc=wj),this.Jc&&(this.bi=new Pd(this,"1.17.2"),this.bi.load()?b=null:delete this.bi);!b&&this.Jc&&(f=null,this.Kc&&(f=oa()+"/api/v1/user?req=load&user="+this.Kc+"&state="+sj(this,"1.17.2")),b=f)&&(this.th=!0);b?na(b,!0,null,this,this.Fo):p(this);c||yj(this,this.Rh)}else m("Unable to find CPU component")}
e[b],d.xc&&d.xc(this,this.fa,this.S,this.Ua);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.Yh=d:this.Jc=parseInt(d,10));var f;if(a=Fa&&Fa.state||(f=!0,a.state))b=this.Bm=a,f||(this.th=!0,this.Jc=wj),this.Jc&&(this.bi=new Pd(this,"1.17.3"),this.bi.load()?b=null:delete this.bi);!b&&this.Jc&&(f=null,this.Kc&&(f=oa()+"/api/v1/user?req=load&user="+this.Kc+"&state="+sj(this,"1.17.3")),b=f)&&(this.th=!0);b?na(b,!0,null,this,this.Fo):p(this);c||yj(this,this.Rh)}else m("Unable to find CPU component")}
La(n,vj);var wj=0;k=vj.prototype;k.rf=function(){return this.Ip};k.Wd=function(){return this.Kc?this.Kc:""};k.Fo=function(a,b,c){c?(this.Yh=null,this.th=!1,this.sa("Unable to load machine state from server (error "+c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):this.Hg=b;p(this)};function yj(a,b,c){for(var d=Ma(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!Ta(f)){Ta(f,function(){yj(a,b,c)});return}}b.call(a,c)}
function zj(a,b){var c=new Pd(a,"1.17.2","validate");if(c.load()&&c.parse()){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.sa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
k.Rh=function(a){void 0===a&&(a=this.Jc||(this.Hg?1:wj));var b=!1,c=!1;this.Rk=!1;var d=this.bi||new Pd(this,"1.17.2");if(-1==a)b=!0;else if(a>wj){if(d.load(this.Hg)){this.Se=new Pd(this,"1.17.2","failsafe");this.Se.load()&&(Aj(this,d),a=2,tj(this.Se));this.Se.set("timestamp",la());uj(this.Se);var e=this.Jc&&!this.th;if(1==a||pa("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=d.parse()){var f=d.get("code"),g=d.get("data");f&&("ok"==f?d.load(g):("error"==
function zj(a,b){var c=new Pd(a,"1.17.3","validate");if(c.load()&&c.parse()){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.sa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
k.Rh=function(a){void 0===a&&(a=this.Jc||(this.Hg?1:wj));var b=!1,c=!1;this.Rk=!1;var d=this.bi||new Pd(this,"1.17.3");if(-1==a)b=!0;else if(a>wj){if(d.load(this.Hg)){this.Se=new Pd(this,"1.17.3","failsafe");this.Se.load()&&(Aj(this,d),a=2,tj(this.Se));this.Se.set("timestamp",la());uj(this.Se);var e=this.Jc&&!this.th;if(1==a||pa("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=d.parse()){var f=d.get("code"),g=d.get("data");f&&("ok"==f?d.load(g):("error"==
f&&"no machine state"!=g?(this.sa("Error: "+g),"unable to verify user"==g&&(ta("user",""),this.Kc=null)):this.ic(f+": "+g),tj(d),d.load()?(c=d.parse(),e=!0):c=!1))}e&&zj(this,c?d:null)}else 2==a&&d.clear()}else zj(this);delete this.Hg;delete this.bi}e=Ma(this.id);for(f=0;f<e.length;f++)g=e[f],g!==this&&g!=this.S&&(c=Bj(this,g,d,b,c));b=[d,a,c];-1!=a?yj(this,this.Kk,b):this.Kk(b)};
function Bj(a,b,c,d,e){if(!b.aa.Wb){b.aa.Wb=!0;if(b.Zb){var f=null;e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Zb(f,d)&&f&&(m("Unable to restore state for "+b.type),a.Bm&&!a.Hg?(c.clear(),a.Jc=wj,window&&window.location.reload()):a.Rk=!0,b.Zb(null),e=!1)}if(!d&&b.$f)for(a=b.$f.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
k.Kk=function(a){var b=a[0],c=0>a[1];a=a[2];this.aa.Wb=!0;this.Ok||(this.ic("PCjs v1.17.2\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Ok=!0);this.S&&(Bj(this,this.S,b,c,a),pc(this.S));this.Rk&&(Aj(this,b),b.clear());!c&&this.Se&&(this.Se.clear(),delete this.Se)};
function Aj(a,b){if(pa("There may be a problem with your PCjs machine.\n\nTo help us diagnose it, click OK to send this PCjs machine state to http://www.pcjs.org.")){var c=a.Wd(),d=b.toString(),e={app:"PCjs",ver:"1.17.2"};e.url=a.url;e.user=c;e.type="bug";e.data=d;na("http://www.pcjs.org/api/v1/report",!0,e)}}
function Cj(a,b,c){var d,e="none",f=new Pd(a,"1.17.2"),g=new Pd(a,"1.17.2","validate"),h=la();g.set("timestamp",h);f.set("timestamp",h);f.set("version","1.17.2");f.set("url",window?window.location.href:null);f.set("browser",window?window.navigator.userAgent:"");a.S&&a.S.Yb&&(c&&rc(a.S),d=a.S.Yb(b,c),"object"===typeof d&&f.set(a.S.id,d),c&&(a.S.aa.Wb=!1,!1===d&&(e=null)));for(var h=Ma(a.id),r=0;r<h.length;r++){var t=h[r];t.aa.Wb&&(t.Yb&&(d=t.Yb(b,c),"object"===typeof d&&f.set(t.id,d)),c&&(t.aa.Wb=
k.Kk=function(a){var b=a[0],c=0>a[1];a=a[2];this.aa.Wb=!0;this.Ok||(this.ic("PCjs v1.17.3\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Ok=!0);this.S&&(Bj(this,this.S,b,c,a),pc(this.S));this.Rk&&(Aj(this,b),b.clear());!c&&this.Se&&(this.Se.clear(),delete this.Se)};
function Aj(a,b){if(pa("There may be a problem with your PCjs machine.\n\nTo help us diagnose it, click OK to send this PCjs machine state to http://www.pcjs.org.")){var c=a.Wd(),d=b.toString(),e={app:"PCjs",ver:"1.17.3"};e.url=a.url;e.user=c;e.type="bug";e.data=d;na("http://www.pcjs.org/api/v1/report",!0,e)}}
function Cj(a,b,c){var d,e="none",f=new Pd(a,"1.17.3"),g=new Pd(a,"1.17.3","validate"),h=la();g.set("timestamp",h);f.set("timestamp",h);f.set("version","1.17.3");f.set("url",window?window.location.href:null);f.set("browser",window?window.navigator.userAgent:"");a.S&&a.S.Yb&&(c&&rc(a.S),d=a.S.Yb(b,c),"object"===typeof d&&f.set(a.S.id,d),c&&(a.S.aa.Wb=!1,!1===d&&(e=null)));for(var h=Ma(a.id),r=0;r<h.length;r++){var t=h[r];t.aa.Wb&&(t.Yb&&(d=t.Yb(b,c),"object"===typeof d&&f.set(t.id,d)),c&&(t.aa.Wb=
!1,!1===d&&(e=null)))}e&&(c?(h=d=!1,b?(a.Kc&&Dj(a,a.Kc,f.toString()),uj(g)&&uj(f)||(e=null,d=h=!0)):a.Jc&&(d=!0,h=3==a.Jc),d&&f.clear(h)):e=f.toString());c&&(a.aa.Wb=!1);return e}k.reset=function(){this.fa&&this.fa.reset&&(this.$b("Resetting "+this.fa.type),this.fa.reset());for(var a=Ma(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.fa&&c.reset&&(this.$b("Resetting "+c.type),c.reset())}};
k.start=function(a,b){for(var c=Ma(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};k.stop=function(a,b){for(var c=Ma(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
k.Bb=function(a,b,c){var d=this;switch(b){case "save":return this.la[b]=c,c.onclick=function(){var a=xj(d,!0);if(a){var b=!(!d.Jc||d.Yh),c=Cj(d,b);b?Dj(d,a,c):d.sa("Resume disabled, machine state not saved")}},!0;case "reset":return this.la[b]=c,c.onclick=function(){sc(d)},!0}return!1};
function xj(a,b){var c=a.Kc;c||(c=sa("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("To save machine states on the pcjs.org server, you need a user ID (email support@pcjs.org).\n\nOnce you have an ID, enter it below.","")),c&&((c=Ej(a,c))||a.sa("Your user ID has not been approved."))):b&&a.sa("Browser local storage is not available"));return c}
function Ej(a,b){a.Kc=null;var c=na(oa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(ta("user",c.data),a.Kc=c.data)}catch(e){m(e.message+" ("+d+")")}return a.Kc}
function Dj(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=sj(a,"1.17.2");d.data=c;b=na(oa()+"/api/v1/user",!1,d);d=b[1];if(b[0]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[0]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.sa("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.sa(c),ta("user",""),a.Kc=null)}}
function Dj(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=sj(a,"1.17.3");d.data=c;b=na(oa()+"/api/v1/user",!1,d);d=b[1];if(b[0]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[0]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.sa("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.sa(c),ta("user",""),a.Kc=null)}}
function sc(a){if(a.Jc&&!a.Yh){var b=pa("Click OK to save changes to this PCjs machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Cj(a,b,!0);!b&&a.Bm?window&&window.location.reload():(b||(a.Ni=!0),a.Rh(wj),a.Ni=!1)}else a.reset(),a.S&&pc(a.S)}function bb(a,b,c){a=Ma(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}
za(function(){for(var a=Ra(window.document,"pcjs-machine"),b=0;b<a.length;b++)for(var c=a[b],d=Pa(c),c=Ra(c,"pcjs","computer"),e=0;e<c.length;e++){var f=c[e],g=Pa(f),g=new vj(g,d,!0);Qa(g,f);yj(g,g.Rh)}});va.show.push(function(){for(var a=Ra(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=Pa(a[b]);(c=Oa("Computer",c.id))&&c.Ok&&!c.aa.Wb&&c.Rh(-1)}});
va.exit.push(function(){for(var a=Ra(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=Pa(a[b]);(c=Oa("Computer",c.id))&&c.aa.Wb&&Cj(c,!(!c.Jc||c.Yh),!0)}});var Fj=0;function Gj(a,b,c,d,e,f){e("Loading "+a+"...");na(a,!0,null,null,function(g,h,r){r?(h||(h="unable to load "+a+" ("+r+")"),f(h,null)):Hj(h,a,b,c,d,e,f)})}
@ -666,6 +666,6 @@ function Hj(a,b,c,d,e,f,g){function h(a,f){if(f)g(f,null);else{if(c){var h=b;h&&
null,a=J.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);g(a,h)}}a?e?Ij(a,f,h):h(a,null):g("no data"+(b?" for file: "+b:""),null)}
function Ij(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");na(e,!0,null,null,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var r=h[0],t,C=/( [a-z]+=)(['"])(.*?)\2/g;t=C.exec(f);)r=0>r.indexOf(t[1])?r.replace(">",t[0]+">"):r.replace(new RegExp(t[1]+"(['\"])(.*?)\\1"),t[0]);h[0]!=r&&(g=g.replace(h[0],r))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],g);Ij(a,b,c)}})}else c(a,null)}
function Jj(a,b,c,d){function e(a){if(void 0===h){var b=g&&Ra(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ja(a))}function f(a){e("Error: "+a);r&&(--Fj||Ba(!0));r=!1}var g,h,r=!0;Fj++;try{if(g=window.document.getElementById(a)){c||(c="/versions/pcjs/1.17.2/components.xsl");var t=function(d,h){if(h){var r=function(d,r){if(r)if(r)if(e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var t=h.transformNode(r);t?(g.outerHTML=t,--Fj||Ba(!0)):f("transformNodeToObject failed")}else window.document.implementation&&
function Jj(a,b,c,d){function e(a){if(void 0===h){var b=g&&Ra(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ja(a))}function f(a){e("Error: "+a);r&&(--Fj||Ba(!0));r=!1}var g,h,r=!0;Fj++;try{if(g=window.document.getElementById(a)){c||(c="/versions/pcjs/1.17.3/components.xsl");var t=function(d,h){if(h){var r=function(d,r){if(r)if(r)if(e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var t=h.transformNode(r);t?(g.outerHTML=t,--Fj||Ba(!0)):f("transformNodeToObject failed")}else window.document.implementation&&
window.document.implementation.createDocument?(t=new XSLTProcessor,t.importStylesheet(r),(t=t.transformToFragment(h,window.document))?g.parentNode?(g.parentNode.replaceChild(t,g),--Fj||Ba(!0)):f("invalid machine element: "+a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f("failed to load XSL file: "+c);else f(d)};h?Gj(c,null,null,!1,e,r):f("failed to load XML file: "+b)}else f(d)};"<"!=b.charAt(0)?Gj(b,a,d,!0,e,t):Hj(b,null,a,d,!1,e,t)}else f("missing machine element: "+
a)}catch(C){f(C.message)}return r}window.embedPC=function(a,b,c,d){Ba(!1);return Jj(a,b,c,d)};window.enableEvents=Ba;window.sendEvent=Ca;})();