Merge branch 'next-release'

This commit is contained in:
Jeff Parsons 2016-03-23 17:27:44 -07:00
commit bcf245a2e2
192 changed files with 199 additions and 199 deletions

View file

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

View file

@ -774,7 +774,7 @@ g[1],xg=g[2];if(a.V){var Vn=1;"-"==xg.charAt(0)&&(Vn=-1,xg=xg.substr(1));var rd=
(Na="keyboard");for(tc in uq)if(Na==tc){sd=uq[tc];uc=!!(a.xc&sd);break}if(!sd){a.O("unknown message category: "+Na);break a}}sd&&("on"==g[2]?(a.xc|=sd,uc=!0):"off"==g[2]&&(a.xc&=~sd,uc=!1))}var ms=0,Sc="";for(tc in uq)if(!Na||Na==tc){var ns=!!(a.xc&uq[tc]);if(null===uc||uc==ns)Sc&&(Sc+=","),++ms%10||(Sc+="\n\t"),"key"==tc&&(tc="keys"),Sc+=tc}void 0===Na&&a.O("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.O((null!==uc?uc?"messages on: ":"messages off: ":"message categories:\n\t")+
(Sc||"none"));iq(a)}break;case "o":var wi=g[1],os=g[2];if(wi&&"?"!=wi){var xi=Cq(a,wi,"port #"),yi=Cq(a,os);void 0!==xi&&void 0!==yi&&(mc(a.ea,xi,1,yi),a.O(u(xi)+": "+t(yi)))}else a.O("output commands:"),a.O("\to [p] [b]\twrite byte [b] to port [p]"),a.O("warning: port accesses can affect hardware state");break;case "p":if("print"==g[0]){Ir(a,b.substr(5));break}var Wn="pr"==g[0]?1:0,de=1+Wn;if(a.N)a.O("step in progress");else{var yg,Xn=!1,jb=gq(a,K(a.F),a.F.va.Z);do switch(yg=!1,a.Qa(jb)){case 38:case 46:case 54:case 62:case 100:case 101:case 102:case 103:case 240:Sq(a,
jb,1);yg=!0;break;case 204:case 206:a.N=de;Sq(a,jb,1);break;case 205:case 224:case 225:case 226:a.N=de;Sq(a,jb,jb.Ub?4:2);break;case 232:a.N=de;Sq(a,jb,jb.Ub?5:3);break;case 154:a.N=de;Sq(a,jb,jb.Ub?7:5);break;case 255:var Yn=a.ub(jb)&14591;if(4351==Yn||6399==Yn)a.N=de,pr(a,jb);break;case 243:case 242:Sq(a,jb,1);Xn=yg=!0;break;case 108:case 109:case 110:case 111:case 164:case 165:case 166:case 167:case 170:case 171:case 172:case 173:case 174:case 175:Xn&&(a.N=de,Sq(a,jb,1))}while(yg);a.N?(a.Od(a.A,
jb,!0),a.Ie()||(a.F.Tc(),a.N=0)):Kr(a,Wn?"tr":"t")}break;case "r":if("reset"==b){a.da&&a.da.reset();break}hr(a,g);break;case "t":Kr(a,g[0],g[1]);break;case "u":ir(a,g[1],g[2],8);break;case "v":if("var"==g[0]){Fr(a,b.substr(3))||(d=!1);break}a.O("PCjs version 1.21.2 ("+a.F.ja+",RELEASE,NOPREFETCH"+(vb?",TYPEDARRAYS":",LONGARRAYS")+",NOBACKTRACK)");a.O(ya());break;case "x":a:if(g[1]&&"?"!=g[1])switch(g[1]){case "cs":var Ze;void 0!==g[3]&&(Ze=+g[3]);switch(g[2]){case "int":a.F.X.ff=Ze;break;case "start":a.F.X.Jf=
jb,!0),a.Ie()||(a.F.Tc(),a.N=0)):Kr(a,Wn?"tr":"t")}break;case "r":if("reset"==b){a.da&&a.da.reset();break}hr(a,g);break;case "t":Kr(a,g[0],g[1]);break;case "u":ir(a,g[1],g[2],8);break;case "v":if("var"==g[0]){Fr(a,b.substr(3))||(d=!1);break}a.O("PCjs version 1.21.3 ("+a.F.ja+",RELEASE,NOPREFETCH"+(vb?",TYPEDARRAYS":",LONGARRAYS")+",NOBACKTRACK)");a.O(ya());break;case "x":a:if(g[1]&&"?"!=g[1])switch(g[1]){case "cs":var Ze;void 0!==g[3]&&(Ze=+g[3]);switch(g[2]){case "int":a.F.X.ff=Ze;break;case "start":a.F.X.Jf=
Ze;break;case "stop":a.F.X.hf=Ze;break;default:a.O("unknown cs option");break a}void 0!==Ze&&Qc(a.F);a.O("checksums "+(a.F.la.We?"enabled":"disabled"));break;case "sp":void 0!==g[2]&&(Zc(a.F,+g[2])||a.O("warning: using 1x multiplier, previous target not reached"));a.O("target speed: "+(a.F.X.De.toFixed(2)+"Mhz")+" ("+a.F.X.Ud+"x)");break;default:a.O("unknown option: "+g[1])}else a.O("execution options:"),a.O("\tcs int #\tset checksum cycle interval to #"),a.O("\tcs start #\tset checksum cycle start count to #"),
a.O("\tcs stop #\tset checksum cycle stop count to #"),a.O("\tsp #\t\tset speed multiplier to #");break;case "?":if(g[1]){Ir(a,b.substr(1));break}var $e="commands:",zi;for(zi in nq)$e+="\n"+ma(zi,7)+nq[zi];Uf(a)||($e+="\nnote: frequency/history disabled if no exec breakpoints");a.O($e);break;default:a.O("unknown command: "+b),d=!1}}}catch(Zn){a.O("debugger error: "+(Zn.stack||Zn.message)),d=!1}return d}function kq(a,b,c){b=ar(a,b,c);for(var d in b)if(!or(a,b[d]))return!1;return!0}
Qa(function(){for(var a=nb(document,"pcjs","debugger"),b=0;b<a.length;b++){var c=a[b],d=kb(c),d=new fq(d);mb(d,c)}});function jf(a,b,c){this.id=a.id;this.key=Mr(a,b,c);this.ha=a.ha;Nr(this,a.hk)}function Mr(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
@ -782,7 +782,7 @@ jf.prototype={constructor:jf,value:function(){return this[this.id]},data:functio
this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}}};function Nr(a,b){a[a.id]={};b&&N(a,"parms",b);a.A=!1}function Or(a){var b=!0;if(Da()){var c=JSON.stringify(a[a.id]);Fa(a.key,c)||(w("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function Pr(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){w(c.message||c),b=!1}return b}function Qr(a,b){return a[a.id][b]||null}function N(a,b,c){try{a[a.id][b]=c}catch(d){}}
function Rr(a,b,c){Ua.call(this,"Computer",a,Rr,67108864);this.la.ec=!1;Sr(this,b);this.Y=Nc(this,"autoPower",a);this.C=0;this.pa=a.busWidth||a.buswidth;this.A=Tr;this.U=null;this.L=this.ka=!1;this.ra=Nc(this,"url")||"";this.ua=(Math.random()+.1).toString(36).substr(2,12);this.B=Ur(this);if(this.F=ib("CPU",this.id)){this.ha=ib("Debugger",this.id);this.ea=new Lb({id:this.se+".bus",buswidth:this.pa},this.F,this.ha);var d,e=gb(this.id);if((this.Xd=ib("Panel",this.id))&&this.Xd.Df)for(b=0;b<e.length;b++)d=
e[b],d.Oa=this.Xd.Oa,d.O=this.Xd.O,d.Df=this.Xd.Df;for(b=0;b<e.length;b++)d=e[b],d.Ic&&d.Ic(this,this.ea,this.F,this.ha);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.V=d:this.A=parseInt(d,10));var f;if(a=Nc(this,"state")||(f=!0,a.state))b=this.fa=a,f||(this.L=!0,this.A=Tr),this.A&&(this.W=new jf(this,Vr),this.W.load()?b=null:delete this.W);!b&&this.A&&(b=Wr(this))&&(this.L=!0);if(b){var g=this;wa(b,null,!0,function(a,b,c){c?(g.V=null,g.L=!1,g.Oa("Unable to load machine state from server (error "+
c+(b?": "+na(b):"")+")")):(g.U=b,g.ka=!0);sb(g)})}else sb(this);this.qa.power||(this.Y=!0);!c&&this.Y&&Xr(this,this.$f)}else w("Unable to find CPU component")}db(Rr);var Vr="1.21.2",Tr=0;m=Rr.prototype;m.df=function(){return this.ua};function Sr(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){w(d.message+" ("+c+")")}}a.da=b}
c+(b?": "+na(b):"")+")")):(g.U=b,g.ka=!0);sb(g)})}else sb(this);this.qa.power||(this.Y=!0);!c&&this.Y&&Xr(this,this.$f)}else w("Unable to find CPU component")}db(Rr);var Vr="1.21.3",Tr=0;m=Rr.prototype;m.df=function(){return this.ua};function Sr(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){w(d.message+" ("+c+")")}}a.da=b}
function Nc(a,b,c){var d=b.toLowerCase(),d=Ya&&(Ya[b]||Ya[d]);void 0===d&&a.da&&(d=a.da[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}m.he=function(){return this.B||""};function Xr(a,b,c){for(var d=gb(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!tb(f)){tb(f,function(){Xr(a,b,c)});return}}b.call(a,c)}
function Yr(a,b){var c=new jf(a,Vr,"validate");if(c.load()&&Pr(c)){var d=Qr(c,"timestamp"),e=b?Qr(b,"timestamp"):"unknown";d!=e&&(a.Oa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
m.$f=function(a){void 0===a&&(a=this.A||(this.U?1:Tr));if(!this.C){this.C++;var b=!1,c=!1;this.ia=!1;var d=this.W||new jf(this,Vr);if(-1==a)b=!0;else if(a>Tr){if(d.load(this.U)){this.N=new jf(this,Vr,"failsafe");this.N.load()&&(Zr(this,d),a=2,Nr(this.N));N(this.N,"timestamp",qa());Or(this.N);var e=this.A&&!this.L;if(1==a||za("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=Pr(d)){var f=Qr(d,"code"),g=Qr(d,"data");f&&("ok"==f?d.load(g):("error"==f&&"no machine state"!=
@ -790,7 +790,7 @@ g?(this.Oa("Error: "+g),"unable to verify user"==g&&(Fa("user",""),this.B=null))
function $r(a,b,c,d,e){if(!b.la.ec){b.la.ec=!0;if(b.kc){var f=null;e&&((f=Qr(c,b.id))||(f=Qr(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.kc(f,d)&&f&&(w("Unable to restore state for "+b.type),a.fa&&!a.ka?(c.clear(),a.A=Tr,window&&window.location.reload()):a.ia=!0,b.kc(null),e=!1)}if(!d&&b.uk)for(a=b.uk.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.Ji=function(a){var b=a[0],c=0>a[1];a=a[2];this.la.ec=!0;var d=this.qa.power;d&&(d.textContent="Shutdown");this.ga||(this.O("PCjs v"+Vr+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.ga=!0);this.F&&($r(this,this.F,b,c,a),Uc(this.F));this.ia&&(Zr(this,b),b.clear());!c&&this.N&&(this.N.clear(),delete this.N);this.C=0};
function Zr(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.ra,d=a.he(),e=b.toString(),f={app:"PCjs"};f.ver=Vr;f.url=c;f.user=d;f.type="bug";f.data=e;wa("http://www.pcjs.org/api/v1/report",f,!0)}}
function Lr(a,b,c){var d,e="none";if(a.C)return null;a.C--;var f=new jf(a,Vr),g=new jf(a,Vr,"validate"),h=qa();N(g,"timestamp",h);N(f,"timestamp",h);N(f,"version","1.21.2");N(f,"url",window?window.location.href:null);N(f,"browser",ya());a.F&&a.F.jc&&(c&&a.F.Xb(),d=a.F.jc(b,c),"object"===typeof d&&N(f,a.F.id,d),c&&(a.F.la.ec=!1,!1===d&&(e=null)));for(var h=gb(a.id),k=0;k<h.length;k++){var l=h[k];l.la.ec&&(l.jc&&(d=l.jc(b,c),"object"===typeof d&&N(f,l.id,d)),c&&(l.la.ec=!1,!1===d&&(e=null)))}e&&(c?
function Lr(a,b,c){var d,e="none";if(a.C)return null;a.C--;var f=new jf(a,Vr),g=new jf(a,Vr,"validate"),h=qa();N(g,"timestamp",h);N(f,"timestamp",h);N(f,"version","1.21.3");N(f,"url",window?window.location.href:null);N(f,"browser",ya());a.F&&a.F.jc&&(c&&a.F.Xb(),d=a.F.jc(b,c),"object"===typeof d&&N(f,a.F.id,d),c&&(a.F.la.ec=!1,!1===d&&(e=null)));for(var h=gb(a.id),k=0;k<h.length;k++){var l=h[k];l.la.ec&&(l.jc&&(d=l.jc(b,c),"object"===typeof d&&N(f,l.id,d)),c&&(l.la.ec=!1,!1===d&&(e=null)))}e&&(c?
(h=d=!1,b?(a.B&&as(a,a.B,f.toString()),Or(g)&&Or(f)||(e=null,d=h=!0)):a.A&&(d=!0,h=3==a.A),d&&f.clear(h)):e=f.toString());c&&(a.la.ec=!1,b=a.qa.power)&&(b.textContent="Power");a.C=0;return e}m.reset=function(){this.ea&&this.ea.reset&&(y(this,"Resetting "+this.ea.type),this.ea.reset());for(var a=gb(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.ea&&c.reset&&(y(this,"Resetting "+c.type),c.reset())}};
m.start=function(a,b){for(var c=gb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};m.stop=function(a,b){for(var c=gb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
m.Rb=function(a,b,c){var d=this;switch(b){case "power":return this.qa[b]=c,c.onclick=function(){d.C||(d.la.ec?Lr(d,!1,!0):Xr(d,d.$f))},!0;case "reset":return this.qa[b]=c,c.onclick=function(){if(d.la.ec&&!d.C)if(d.A&&!d.V){var a=za("Click OK to save changes to this PCjs machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Lr(d,a,!0);!a&&d.fa?window&&window.location.reload():(a||(d.dh=!0),d.$f(Tr),d.dh=!1)}else d.reset(),d.F&&Uc(d.F)},!0;case "save":if(ja(xa(),"pcjs.org")){c.parentNode.removeChild(c);
@ -805,9 +805,9 @@ function ps(a,b,c,d,e,f,g){function h(a,f){if(f)g(f,null);else{if(c){fb(c,b,a);v
function qs(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");wa(e,null,!0,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 k=h[0],l,n=/( [a-z]+=)(['"])(.*?)\2/g;l=n.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],g);qs(a,b,c)}})}else c(a,null)}
function rs(a,b,c,d){function e(a){if(void 0===h){var b=g&&nb(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=la(a))}function f(a){e("Error: "+a);k&&(--cs||Sa(!0));k=!1}var g,h,k=!0;cs++;eb[a]={};try{if(g=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],q=document.createElement("style");q.type="text/css";q.styleSheet?q.styleSheet.cssText=l:q.appendChild(document.createTextNode(l));n.appendChild(q)}c||
(c="/versions/pcjs/1.21.2/components.xsl");l=function(d,h){h?ds(c,null,null,!1,e,function(d,k){if(k)if(fb(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=h.transformNode(k);l?(g.outerHTML=l,--cs||Sa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(k),(l=l.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--cs||Sa(!0)):f("invalid machine element: "+
(c="/versions/pcjs/1.21.3/components.xsl");l=function(d,h){h?ds(c,null,null,!1,e,function(d,k){if(k)if(fb(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=h.transformNode(k);l?(g.outerHTML=l,--cs||Sa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(k),(l=l.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--cs||Sa(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?ds(b,a,d,!0,e,l):ps(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(p){f(p.message)}return k}window.embedPC=function(a,b,c,d){Sa(!1);return rs(a,b,c,d)};window.enableEvents=Sa;window.sendEvent=Ta;
function ss(a,b,c,d){if(!c&&b){d.push(b);a=eb[d[0]];b=null;for(var e in a)if(ja(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?wa(b,null,!0,function(a,b){ts(b,d)}):ts(null,d)}else w("Error ("+c+") requesting "+a)}
function ts(a,b){var c,d,e,f=b[0],g=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var h=eb[f],k={},l;for(l in h){var n=h[l],q=ga(l);if("xml"==q){for(q=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=q.exec(h[l]);){var p=d[2];p&&(h[p]||(n=n.replace(d[0],"")))}d=l=fa(l)}else"xsl"==q&&(e=l=fa(l));k[l]=n}a&&(k[l="css"]=a);b[2]&&(k[l="parms"]=b[2]);b[3]&&(k[l="state"]=b[3]);d&&e?(l=JSON.stringify(k),g+=".js",c=c[1]+"var resources="+l+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"&#xA9;"),c=Ia(c,"javascript",!1,g),c=c+(', copy it to your web server as "'+g+'", and then add the following to your web page:\n\n')+('<div id="'+f+'"></div>\n'),c+="...\n",c+='<script type="text/javascript" src="'+g+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",w(c)):w("Missing XML/XSL resources")}
window.savePC=function(a,b,c){var d=ib("Computer",a),e=ib("Debugger",a);if(d){var f=Lr(d,!0),g=d.da?JSON.stringify(d.da):null;b||(b="/versions/pcjs/1.21.2/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,hk:g}))return!0;wa(b,null,!0,function(c,d,e){ss(c,d,e,[a,fa(b,!0),g,f])});return!0}w("Unable to identify machine '"+a+"'");return!1};})();
window.savePC=function(a,b,c){var d=ib("Computer",a),e=ib("Debugger",a);if(d){var f=Lr(d,!0),g=d.da?JSON.stringify(d.da):null;b||(b="/versions/pcjs/1.21.3/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,hk:g}))return!0;wa(b,null,!0,function(c,d,e){ss(c,d,e,[a,fa(b,!0),g,f])});return!0}w("Unable to identify machine '"+a+"'");return!1};})();

View file

@ -598,7 +598,7 @@ be.prototype={constructor:be,value:function(){return this[this.id]},data:functio
this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}}};function hn(a,b){a[a.id]={};b&&D(a,"parms",b);a.A=!1}function jn(a){var b=!0;if(va()){var c=JSON.stringify(a[a.id]);xa(a.key,c)||(n("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function kn(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){n(c.message||c),b=!1}return b}function ln(a,b){return a[a.id][b]||null}function D(a,b,c){try{a[a.id][b]=c}catch(d){}}
function mn(a,b,c){Ia.call(this,"Computer",a,mn);this.da.Rb=!1;nn(this,b);this.P=ic(this,"autoPower",a);this.D=0;this.ca=a.busWidth||a.buswidth;this.B=on;this.L=null;this.H=this.aa=!1;this.oa=ic(this,"url")||"";this.fa=(Math.random()+.1).toString(36).substr(2,12);this.C=pn(this);if(this.A=Va("CPU",this.id)){this.Ja=Va("Debugger",this.id);this.ha=new qb({id:this.mf+".bus",buswidth:this.ca},this.A,this.Ja);var d,e=Ta(this.id);if((this.md=Va("Panel",this.id))&&this.md.ig)for(b=0;b<e.length;b++)d=e[b],
d.Ca=this.md.Ca,d.qc=this.md.qc,d.ig=this.md.ig;for(b=0;b<e.length;b++)d=e[b],d.oc&&d.oc(this,this.ha,this.A,this.Ja);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.K=d:this.B=parseInt(d,10));var f;if(a=ic(this,"state")||(f=!0,a.state))b=this.S=a,f||(this.H=!0,this.B=on),this.B&&(this.R=new be(this,qn),this.R.load()?b=null:delete this.R);!b&&this.B&&(b=rn(this))&&(this.H=!0);if(b){var g=this;pa(b,null,!0,function(a,b,c){c?(g.K=null,g.H=!1,g.Ca("Unable to load machine state from server (error "+
c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(g.L=b,g.aa=!0);p(g)})}else p(this);this.ka.power||(this.P=!0);!c&&this.P&&sn(this,this.ef)}else n("Unable to find CPU component")}Qa(mn);var qn="1.21.2",on=0;l=mn.prototype;l.qe=function(){return this.fa};function nn(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){n(d.message+" ("+c+")")}}a.I=b}
c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(g.L=b,g.aa=!0);p(g)})}else p(this);this.ka.power||(this.P=!0);!c&&this.P&&sn(this,this.ef)}else n("Unable to find CPU component")}Qa(mn);var qn="1.21.3",on=0;l=mn.prototype;l.qe=function(){return this.fa};function nn(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){n(d.message+" ("+c+")")}}a.I=b}
function ic(a,b,c){var d=b.toLowerCase(),d=La&&(La[b]||La[d]);void 0===d&&a.I&&(d=a.I[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}l.xd=function(){return this.C||""};function sn(a,b,c){for(var d=Ta(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!ab(f)){ab(f,function(){sn(a,b,c)});return}}b.call(a,c)}
function tn(a,b){var c=new be(a,qn,"validate");if(c.load()&&kn(c)){var d=ln(c,"timestamp"),e=b?ln(b,"timestamp"):"unknown";d!=e&&(a.Ca("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
l.ef=function(a){void 0===a&&(a=this.B||(this.L?1:on));if(!this.D){this.D++;var b=!1,c=!1;this.Y=!1;var d=this.R||new be(this,qn);if(-1==a)b=!0;else if(a>on){if(d.load(this.L)){this.G=new be(this,qn,"failsafe");this.G.load()&&(un(this,d),a=2,hn(this.G));D(this.G,"timestamp",la());jn(this.G);var e=this.B&&!this.H;if(1==a||ra("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=kn(d)){var f=ln(d,"code"),g=ln(d,"data");f&&("ok"==f?d.load(g):("error"==f&&"no machine state"!=
@ -606,7 +606,7 @@ g?(this.Ca("Error: "+g),"unable to verify user"==g&&(xa("user",""),this.C=null))
function vn(a,b,c,d,e){if(!b.da.Rb){b.da.Rb=!0;if(b.Vb){var f=null;e&&((f=ln(c,b.id))||(f=ln(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Vb(f,d)&&f&&(n("Unable to restore state for "+b.type),a.S&&!a.aa?(c.clear(),a.B=on,window&&window.location.reload()):a.Y=!0,b.Vb(null),e=!1)}if(!d&&b.Ah)for(a=b.Ah.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
l.Oh=function(a){var b=a[0],c=0>a[1];a=a[2];this.da.Rb=!0;var d=this.ka.power;d&&(d.textContent="Shutdown");this.W||(this.qc("PCjs v"+qn+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.W=!0);this.A&&(vn(this,this.A,b,c,a),mc(this.A));this.Y&&(un(this,b),b.clear());!c&&this.G&&(this.G.clear(),delete this.G);this.D=0};
function un(a,b){if(ra("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.oa,d=a.xd(),e=b.toString(),f={app:"PCjs"};f.ver=qn;f.url=c;f.user=d;f.type="bug";f.data=e;pa("http://www.pcjs.org/api/v1/report",f,!0)}}
function wn(a,b,c){var d,e="none";if(a.D)return null;a.D--;var f=new be(a,qn),g=new be(a,qn,"validate"),h=la();D(g,"timestamp",h);D(f,"timestamp",h);D(f,"version","1.21.2");D(f,"url",window?window.location.href:null);D(f,"browser",window?window.navigator.userAgent:"");a.A&&a.A.Ub&&(c&&pc(a.A),d=a.A.Ub(b,c),"object"===typeof d&&D(f,a.A.id,d),c&&(a.A.da.Rb=!1,!1===d&&(e=null)));for(var h=Ta(a.id),k=0;k<h.length;k++){var m=h[k];m.da.Rb&&(m.Ub&&(d=m.Ub(b,c),"object"===typeof d&&D(f,m.id,d)),c&&(m.da.Rb=
function wn(a,b,c){var d,e="none";if(a.D)return null;a.D--;var f=new be(a,qn),g=new be(a,qn,"validate"),h=la();D(g,"timestamp",h);D(f,"timestamp",h);D(f,"version","1.21.3");D(f,"url",window?window.location.href:null);D(f,"browser",window?window.navigator.userAgent:"");a.A&&a.A.Ub&&(c&&pc(a.A),d=a.A.Ub(b,c),"object"===typeof d&&D(f,a.A.id,d),c&&(a.A.da.Rb=!1,!1===d&&(e=null)));for(var h=Ta(a.id),k=0;k<h.length;k++){var m=h[k];m.da.Rb&&(m.Ub&&(d=m.Ub(b,c),"object"===typeof d&&D(f,m.id,d)),c&&(m.da.Rb=
!1,!1===d&&(e=null)))}e&&(c?(h=d=!1,b?(a.C&&xn(a,a.C,f.toString()),jn(g)&&jn(f)||(e=null,d=h=!0)):a.B&&(d=!0,h=3==a.B),d&&f.clear(h)):e=f.toString());c&&(a.da.Rb=!1,b=a.ka.power)&&(b.textContent="Power");a.D=0;return e}l.reset=function(){this.ha&&this.ha.reset&&this.ha.reset();for(var a=Ta(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.ha&&c.reset&&c.reset()}};l.start=function(a,b){for(var c=Ta(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};
l.stop=function(a,b){for(var c=Ta(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
l.zb=function(a,b,c){var d=this;switch(b){case "power":return this.ka[b]=c,c.onclick=function(){d.D||(d.da.Rb?wn(d,!1,!0):sn(d,d.ef))},!0;case "reset":return this.ka[b]=c,c.onclick=function(){if(d.da.Rb&&!d.D)if(d.B&&!d.K){var a=ra("Click OK to save changes to this PCjs machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");wn(d,a,!0);!a&&d.S?window&&window.location.reload():(a||(d.lg=!0),d.ef(on),d.lg=!1)}else d.reset(),d.A&&mc(d.A)},!0;case "save":if(ha(qa(),"pcjs.org")){c.parentNode.removeChild(c);
@ -621,9 +621,9 @@ function Bn(a,b,c,d,e,f,g){function h(a,f){if(f)g(f,null);else{if(c){Sa(c,b,a);v
function Cn(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");pa(e,null,!0,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 k=h[0],m,q=/( [a-z]+=)(['"])(.*?)\2/g;m=q.exec(f);)k=0>k.indexOf(m[1])?k.replace(">",m[0]+">"):k.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],g);Cn(a,b,c)}})}else c(a,null)}
function Dn(a,b,c,d){function e(a){if(void 0===h){var b=g&&Za(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ja(a))}function f(a){e("Error: "+a);k&&(--zn||Ga(!0));k=!1}var g,h,k=!0;zn++;Ra[a]={};try{if(g=document.getElementById(a)){var m;if("object"==typeof resources&&(m=resources.css)){var q=document.head||document.getElementsByTagName("head")[0],x=document.createElement("style");x.type="text/css";x.styleSheet?x.styleSheet.cssText=m:x.appendChild(document.createTextNode(m));q.appendChild(x)}c||
(c="/versions/pcjs/1.21.2/components.xsl");m=function(d,h){h?An(c,null,null,!1,e,function(d,k){if(k)if(Sa(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var m=h.transformNode(k);m?(g.outerHTML=m,--zn||Ga(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(m=new XSLTProcessor,m.importStylesheet(k),(m=m.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(m,g),--zn||Ga(!0)):f("invalid machine element: "+
(c="/versions/pcjs/1.21.3/components.xsl");m=function(d,h){h?An(c,null,null,!1,e,function(d,k){if(k)if(Sa(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var m=h.transformNode(k);m?(g.outerHTML=m,--zn||Ga(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(m=new XSLTProcessor,m.importStylesheet(k),(m=m.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(m,g),--zn||Ga(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?An(b,a,d,!0,e,m):Bn(b,null,a,d,!1,e,m)}else f("missing machine element: "+a)}catch(r){f(r.message)}return k}window.embedPC=function(a,b,c,d){Ga(!1);return Dn(a,b,c,d)};window.enableEvents=Ga;window.sendEvent=Ha;
function En(a,b,c,d){if(!c&&b){d.push(b);a=Ra[d[0]];b=null;for(var e in a)if(ha(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?pa(b,null,!0,function(a,b){Fn(b,d)}):Fn(null,d)}else n("Error ("+c+") requesting "+a)}
function Fn(a,b){var c,d,e,f=b[0],g=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var h=Ra[f],k={},m;for(m in h){var q=h[m],x=ga(m);if("xml"==x){for(x=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=x.exec(h[m]);){var r=d[2];r&&(h[r]||(q=q.replace(d[0],"")))}d=m=fa(m)}else"xsl"==x&&(e=m=fa(m));k[m]=q}a&&(k[m="css"]=a);b[2]&&(k[m="parms"]=b[2]);b[3]&&(k[m="state"]=b[3]);d&&e?(m=JSON.stringify(k),g+=".js",c=c[1]+"var resources="+m+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"&#xA9;"),c=za(c,"javascript",!1,g),c=c+(', copy it to your web server as "'+g+'", and then add the following to your web page:\n\n')+('<div id="'+f+'"></div>\n'),c+="...\n",c+='<script type="text/javascript" src="'+g+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",n(c)):n("Missing XML/XSL resources")}
window.savePC=function(a,b,c){var d=Va("Computer",a),e=Va("Debugger",a);if(d){var f=wn(d,!0),g=d.I?JSON.stringify(d.I):null;b||(b="/versions/pcjs/1.21.2/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,gj:g}))return!0;pa(b,null,!0,function(c,d,e){En(c,d,e,[a,fa(b,!0),g,f])});return!0}n("Unable to identify machine '"+a+"'");return!1};})();
window.savePC=function(a,b,c){var d=Va("Computer",a),e=Va("Debugger",a);if(d){var f=wn(d,!0),g=d.I?JSON.stringify(d.I):null;b||(b="/versions/pcjs/1.21.3/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,gj:g}))return!0;pa(b,null,!0,function(c,d,e){En(c,d,e,[a,fa(b,!0),g,f])});return!0}n("Unable to identify machine '"+a+"'");return!1};})();