Working on v1.18.3 now

This commit is contained in:
Jeff Parsons 2015-06-21 10:12:19 -07:00
commit 3c89824e53
152 changed files with 7053 additions and 198 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.18.2</xsl:variable>
<xsl:variable name="APPVERSION">1.18.3</xsl:variable>
<xsl:variable name="SITEHOST">www.pcjs.org</xsl:variable>
<xsl:template name="componentStyles">
@ -182,6 +182,7 @@
</xsl:variable>
<xsl:variable name="style">
<xsl:if test="$component = 'machine'">overflow:auto;width:100%;</xsl:if>
<xsl:if test="@background">background-color:<xsl:value-of select="@background"/>;</xsl:if>
<xsl:if test="@style"><xsl:value-of select="@style"/></xsl:if>
</xsl:variable>
<xsl:variable name="componentClass">

View file

@ -1117,7 +1117,7 @@ g;break;case "EBX":a.O.D=g;break;case "ECX":a.O.G=g;break;case "EDX":a.O.H=g;bre
Mb(a.O));ym(a,sm(a.od))}}function Rm(a,b,c){for(var d=null,e=b.za,g=e,l=1;6>=l;l++){if(2<l){b.za=e;b.Ba=null;var p=um(a,b);if(0<p.indexOf("CALL")||c&&0<p.indexOf("INT")){d=p;break}}if(!--e)break}b.za=g;return d}function Sm(a,b,c){var d="tr"==b;b=null!=c?+c:1;var e=1==b?0:1;Ja(b,function(){return mb(a,!0)&&a.kh(e,d,!1)},function(){Zc(a.O);mb(a,!1)})}function Gm(a,b,c){b.nl=b.ad||b.Zc;c&&(b.ad=4==a.O.ta.pa,b.Zc=4==a.O.ta.Hd);b.we=c}
function ym(a,b,c,d){b=Mm(a,b,1);if(null!=b.za){void 0===d&&(d=1);var e=Sl(a,a.ko,b.ia,a.ma.Vh),e=256;if(void 0!==c){e=Mm(a,c,1);if(null==e.za||e.za<b.za)return;e=e.za-b.za;if(256<e){a.R("range too large");return}d=-1}var g=b.za!=a.od.za;c=0;for(Gm(a,b,!0);0<e&&d--;){a.Qa(b);var l=b.Ba,p=nb(a,!1)||a.Jc?a.Nd:null,v=null!=p?"cycles":null,w=Fm(a,b);if(w[0]){var F=w[0]+":",g=!1;w[2]&&(F+=" "+w[2]);a.R(F)}g&&a.R();w[3]&&(v=w[3],p=null);g=um(a,b,v,p);b.we||d||d++;a.R(g);a.od=b;e-=b.Ba-l;g=!1;c++}}}
function nm(a,b,c){if(c)if(b){0>a.sd&&a.gd.length&&(a.sd=0);if(0>a.sd||b!=a.gd[a.sd])a.gd.splice(0,0,b),a.sd=0;a.sd--}else b=a.gd[a.sd+1];a=b?b.split(0<=b.indexOf("|")?"|":";"):[""];for(var d in a)a[d]=na(a[d]);return a}
function Wl(a,b){var c=!0;try{if(b.length||(a.zg?(a.R("ended assemble @"+sm(a.Nf)),a.od=a.Nf,a.zg=!1):b="?"),b=b.toLowerCase(),pb(a)&&0<b.length){if(a.zg)b="a "+sm(a.Nf)+" "+b;else{var d,e,g;switch(b){case "reset":return a.Fa&&a.Fa.reset(),!0;case "ver":return a.R("PCjs version 1.18.2 ("+a.O.ka+",RELEASE,NOPREFETCH"+(rb?",TYPEDARRAYS":",LONGARRAYS")+",NOBACKTRACK)"),!0;default:for(e=b.charAt(0),g=1;g<b.length;g++){d=b.charAt(g);if(" "==d)break;if("r"==e||"a">d||"z"<d){b=b.substring(0,g)+" "+b.substring(g);
function Wl(a,b){var c=!0;try{if(b.length||(a.zg?(a.R("ended assemble @"+sm(a.Nf)),a.od=a.Nf,a.zg=!1):b="?"),b=b.toLowerCase(),pb(a)&&0<b.length){if(a.zg)b="a "+sm(a.Nf)+" "+b;else{var d,e,g;switch(b){case "reset":return a.Fa&&a.Fa.reset(),!0;case "ver":return a.R("PCjs version 1.18.3 ("+a.O.ka+",RELEASE,NOPREFETCH"+(rb?",TYPEDARRAYS":",LONGARRAYS")+",NOBACKTRACK)"),!0;default:for(e=b.charAt(0),g=1;g<b.length;g++){d=b.charAt(g);if(" "==d)break;if("r"==e||"a">d||"z"<d){b=b.substring(0,g)+" "+b.substring(g);
break}}}}var l=b.split(" ");switch(l[0].charAt(0)){case "a":var p=Mm(a,l[1],1);if(null!=p.za)if(a.Nf=p,void 0===l[2])a.R("begin assemble @"+sm(p)),a.zg=!0,Zc(a.O);else{var v;a.R("not supported yet");v=[];if(v.length){for(var w=0;w<v.length;w++)a.dd(p,v[w],1);a.R(um(a,a.Nf))}}break;case "b":a:{var F=l[1],K=l[0].charAt(1);if(K&&"?"!=K)if("l"==K)w=0,w+=Dm(a,a.Mc),w+=Dm(a,a.Re),(w+=Dm(a,a.Bd))||a.R("no breakpoints");else if(void 0===F)a.R("missing breakpoint address");else{w={};if("*"!=F&&(w=Mm(a,F,1),
null==w.za))break a;F=null==w.za?F:ga(w.za);"c"==K?null==w.za?(Tl(a),a.R("all breakpoints cleared")):Bm(a,a.Mc,w,!0)||Bm(a,a.Re,w,!0)||Bm(a,a.Bd,w,!0)||a.R("breakpoint missing: "+sm(w)):"i"==K?a.R("breakpoint "+(nc(a.ma,w.za)?"enabled":"cleared")+": port "+F+" (input)"):"o"==K?a.R("breakpoint "+(rc(a.ma,w.za)?"enabled":"cleared")+": port "+F+" (output)"):null!=w.za&&("p"==K?a.Xe(a.Mc,w):"r"==K?a.Xe(a.Re,w):"w"==K?a.Xe(a.Bd,w):a.R("unknown breakpoint command: "+K))}else a.R("\nbreakpoint commands:"),
a.R("\tbi [p]\ttoggle break on input port [p]"),a.R("\tbo [p]\ttoggle break on output port [p]"),a.R("\tbp [a]\tset exec breakpoint at addr [a]"),a.R("\tbr [a]\tset read breakpoint at addr [a]"),a.R("\tbw [a]\tset write breakpoint at addr [a]"),a.R("\tbc [a]\tclear breakpoint at addr [a]"),a.R("\tbl\tlist all breakpoints")}break;case "c":a.Ih&&(a.Ih.value="");break;case "d":a:{var J=l[0],w=l[1],I=l[2],T;if("?"==w){w="";for(T in cm)a.Nk[T]&&(w&&(w+=","),w+=T);w+=",state,symbols";a.R("\ndump commands:");
@ -1136,21 +1136,21 @@ Je.prototype={constructor:Je,set:function(a,b){try{this[this.id][a]=b}catch(c){}
a:JSON.stringify(a)},clear:function(a){Vm(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(g){}b.splice(c,1);c=0}},qa:function(a){return this.Y?this.Y.qa(null==a?16777216:a|16777216):!1},ab:function(a){this.Y&&this.Y.message(a)}};function Vm(a,b){a[a.id]={};b&&a.set("parms",b);a.ml=!1}
function Wm(a){var b=!0;if(Ea()){var c=JSON.stringify(a[a.id]);Ga(a.key,c)||(Ba("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}
function Xm(a,b,c){Ua.call(this,"Computer",a,Xm,67108864);this.fa.jc=!1;this.Be=a.busWidth||a.buswidth;this.wd=Ym;this.ri=null;this.ej=!1;this.url=b?b.url:null;this.Ks=(Math.random()+.1).toString(36).substr(2,12);this.xd=Zm(this);if(this.O=hb("CPU",this.id)){this.Y=hb("Debugger",this.id);this.ma=new Zb({id:this.fo+".bus",buswidth:this.Be},this.O,this.Y);var d,e=fb(this.id);if((this.Ge=hb("Panel",this.id))&&this.Ge.Ih)for(b=0;b<e.length;b++)d=e[b],d.Da=this.Ge.Da,d.R=this.Ge.R,d.Ih=this.Ge.Ih;for(b=
0;b<e.length;b++)d=e[b],d.Kc&&d.Kc(this,this.ma,this.O,this.Y);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.yk=d:this.wd=parseInt(d,10));var g;if(a=Ya&&Ya.state||(g=!0,a.state))b=this.Qo=a,g||(this.ej=!0,this.wd=Ym),this.wd&&(this.Ck=new Je(this,"1.18.2"),this.Ck.load()?b=null:delete this.Ck);!b&&this.wd&&(g=null,this.xd&&(g=Aa()+"/api/v1/user?req=load&user="+this.xd+"&state="+Um(this,"1.18.2")),b=g)&&(this.ej=!0);b?za(b,!0,null,this,this.ir):ob(this);c||$m(this,this.nk)}else Ba("Unable to find CPU component")}
0;b<e.length;b++)d=e[b],d.Kc&&d.Kc(this,this.ma,this.O,this.Y);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.yk=d:this.wd=parseInt(d,10));var g;if(a=Ya&&Ya.state||(g=!0,a.state))b=this.Qo=a,g||(this.ej=!0,this.wd=Ym),this.wd&&(this.Ck=new Je(this,"1.18.3"),this.Ck.load()?b=null:delete this.Ck);!b&&this.wd&&(g=null,this.xd&&(g=Aa()+"/api/v1/user?req=load&user="+this.xd+"&state="+Um(this,"1.18.3")),b=g)&&(this.ej=!0);b?za(b,!0,null,this,this.ir):ob(this);c||$m(this,this.nk)}else Ba("Unable to find CPU component")}
eb(Xm);var Ym=0;f=Xm.prototype;f.Hg=function(){return this.Ks};f.kf=function(){return this.xd?this.xd:""};f.ir=function(a,b,c){c?(this.yk=null,this.ej=!1,this.Da("Unable to load machine state from server (error "+c+(b?": "+na(b):"")+")")):this.ri=b;ob(this)};function $m(a,b,c){for(var d=fb(a.id),e=0;e<=d.length;e++){var g=e<d.length?d[e]:a;if(!pb(g)){pb(g,function(){$m(a,b,c)});return}}b.call(a,c)}
function an(a,b){var c=new Je(a,"1.18.2","validate");if(c.load()&&c.parse()){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.Da("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
f.nk=function(a){void 0===a&&(a=this.wd||(this.ri?1:Ym));var b=!1,c=!1;this.Un=!1;var d=this.Ck||new Je(this,"1.18.2");if(-1==a)b=!0;else if(a>Ym){if(d.load(this.ri)){this.eg=new Je(this,"1.18.2","failsafe");this.eg.load()&&(bn(this,d),a=2,Vm(this.eg));this.eg.set("timestamp",sa());Wm(this.eg);var e=this.wd&&!this.ej;if(1==a||Ca("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=d.parse()){var g=d.get("code"),l=d.get("data");g&&("ok"==g?d.load(l):("error"==
function an(a,b){var c=new Je(a,"1.18.3","validate");if(c.load()&&c.parse()){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.Da("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
f.nk=function(a){void 0===a&&(a=this.wd||(this.ri?1:Ym));var b=!1,c=!1;this.Un=!1;var d=this.Ck||new Je(this,"1.18.3");if(-1==a)b=!0;else if(a>Ym){if(d.load(this.ri)){this.eg=new Je(this,"1.18.3","failsafe");this.eg.load()&&(bn(this,d),a=2,Vm(this.eg));this.eg.set("timestamp",sa());Wm(this.eg);var e=this.wd&&!this.ej;if(1==a||Ca("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=d.parse()){var g=d.get("code"),l=d.get("data");g&&("ok"==g?d.load(l):("error"==
g&&"no machine state"!=l?(this.Da("Error: "+l),"unable to verify user"==l&&(Ga("user",""),this.xd=null)):this.R(g+": "+l),Vm(d),d.load()?(c=d.parse(),e=!0):c=!1))}e&&an(this,c?d:null)}else 2==a&&d.clear()}else an(this);delete this.ri;delete this.Ck}e=fb(this.id);for(g=0;g<e.length;g++)l=e[g],l!==this&&l!=this.O&&(c=cn(this,l,d,b,c));b=[d,a,c];-1!=a?$m(this,this.Ln,b):this.Ln(b)};
function cn(a,b,c,d,e){if(!b.fa.jc){b.fa.jc=!0;if(b.lc){var g=null;e&&((g=c.get(b.id))||(g=c.get(b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof g&&(g=null);!b.lc(g,d)&&g&&(Ba("Unable to restore state for "+b.type),a.Qo&&!a.ri?(c.clear(),a.wd=Ym,window&&window.location.reload()):a.Un=!0,b.lc(null),e=!1)}if(!d&&b.Gn)for(a=b.Gn.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
f.Ln=function(a){var b=a[0],c=0>a[1];a=a[2];this.fa.jc=!0;this.Rn||(this.R("PCjs v1.18.2\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Rn=!0);this.O&&(cn(this,this.O,b,c,a),$c(this.O));this.Un&&(bn(this,b),b.clear());!c&&this.eg&&(this.eg.clear(),delete this.eg)};
function bn(a,b){if(Ca("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.kf(),d=b.toString(),e={app:"PCjs",ver:"1.18.2"};e.url=a.url;e.user=c;e.type="bug";e.data=d;za("http://www.pcjs.org/api/v1/report",!0,e)}}
function Tm(a,b,c){var d,e="none",g=new Je(a,"1.18.2"),l=new Je(a,"1.18.2","validate"),p=sa();l.set("timestamp",p);g.set("timestamp",p);g.set("version","1.18.2");g.set("url",window?window.location.href:null);g.set("browser",window?window.navigator.userAgent:"");a.O&&a.O.kc&&(c&&a.O.zb(),d=a.O.kc(b,c),"object"===typeof d&&g.set(a.O.id,d),c&&(a.O.fa.jc=!1,!1===d&&(e=null)));for(var p=fb(a.id),v=0;v<p.length;v++){var w=p[v];w.fa.jc&&(w.kc&&(d=w.kc(b,c),"object"===typeof d&&g.set(w.id,d)),c&&(w.fa.jc=
f.Ln=function(a){var b=a[0],c=0>a[1];a=a[2];this.fa.jc=!0;this.Rn||(this.R("PCjs v1.18.3\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Rn=!0);this.O&&(cn(this,this.O,b,c,a),$c(this.O));this.Un&&(bn(this,b),b.clear());!c&&this.eg&&(this.eg.clear(),delete this.eg)};
function bn(a,b){if(Ca("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.kf(),d=b.toString(),e={app:"PCjs",ver:"1.18.3"};e.url=a.url;e.user=c;e.type="bug";e.data=d;za("http://www.pcjs.org/api/v1/report",!0,e)}}
function Tm(a,b,c){var d,e="none",g=new Je(a,"1.18.3"),l=new Je(a,"1.18.3","validate"),p=sa();l.set("timestamp",p);g.set("timestamp",p);g.set("version","1.18.3");g.set("url",window?window.location.href:null);g.set("browser",window?window.navigator.userAgent:"");a.O&&a.O.kc&&(c&&a.O.zb(),d=a.O.kc(b,c),"object"===typeof d&&g.set(a.O.id,d),c&&(a.O.fa.jc=!1,!1===d&&(e=null)));for(var p=fb(a.id),v=0;v<p.length;v++){var w=p[v];w.fa.jc&&(w.kc&&(d=w.kc(b,c),"object"===typeof d&&g.set(w.id,d)),c&&(w.fa.jc=
!1,!1===d&&(e=null)))}e&&(c?(p=d=!1,b?(a.xd&&dn(a,a.xd,g.toString()),Wm(l)&&Wm(g)||(e=null,d=p=!0)):a.wd&&(d=!0,p=3==a.wd),d&&g.clear(p)):e=g.toString());c&&(a.fa.jc=!1);return e}f.reset=function(){this.ma&&this.ma.reset&&(this.ab("Resetting "+this.ma.type),this.ma.reset());for(var a=fb(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.ma&&c.reset&&(this.ab("Resetting "+c.type),c.reset())}};
f.start=function(a,b){for(var c=fb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};f.stop=function(a,b){for(var c=fb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
f.Nb=function(a,b,c){var d=this;switch(b){case "save":return this.va[b]=c,c.onclick=function(){var a=Zm(d,!0);if(a){var b=!(!d.wd||d.yk),c=Tm(d,b);b?dn(d,a,c):d.Da("Resume disabled, machine state not saved")}},!0;case "reset":return this.va[b]=c,c.onclick=function(){fd(d)},!0}return!1};
function Zm(a,b){var c=a.xd;c||(c=Fa("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=en(a,c))||a.Da("Your user ID has not been approved."))):b&&a.Da("Browser local storage is not available"));return c}
function en(a,b){a.xd=null;var c=za(Aa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(Ga("user",c.data),a.xd=c.data)}catch(e){Ba(e.message+" ("+d+")")}return a.xd}
function dn(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Um(a,"1.18.2");d.data=c;b=za(Aa()+"/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.Da("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.Da(c),Ga("user",""),a.xd=null)}}
function dn(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Um(a,"1.18.3");d.data=c;b=za(Aa()+"/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.Da("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.Da(c),Ga("user",""),a.xd=null)}}
function fd(a){if(a.wd&&!a.yk){var b=Ca("Click OK to save changes to this PCjs machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Tm(a,b,!0);!b&&a.Qo?window&&window.location.reload():(b||(a.ol=!0),a.nk(Ym),a.ol=!1)}else a.reset(),a.O&&$c(a.O)}function xb(a,b,c){a=fb(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}
Pa(function(){for(var a=kb(window.document,"pcjs-machine"),b=0;b<a.length;b++)for(var c=a[b],d=ib(c),c=kb(c,"pcjs","computer"),e=0;e<c.length;e++){var g=c[e],l=ib(g),l=new Xm(l,d,!0);jb(l,g);$m(l,l.nk)}});La.show.push(function(){for(var a=kb(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=ib(a[b]);(c=hb("Computer",c.id))&&c.Rn&&!c.fa.jc&&c.nk(-1)}});
La.exit.push(function(){for(var a=kb(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=ib(a[b]);(c=hb("Computer",c.id))&&c.fa.jc&&Tm(c,!(!c.wd||c.yk),!0)}});var fn=0;function gn(a,b,c,d,e,g){e("Loading "+a+"...");za(a,!0,null,null,function(l,p,v){v?(p||(p="unable to load "+a+" ("+v+")"),g(p,null)):hn(p,a,b,c,d,e,g)})}
@ -1158,6 +1158,6 @@ function hn(a,b,c,d,e,g,l){function p(a,g){if(g)l(g,null);else{if(c){var p=b;p&&
null,a=K.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);l(a,p)}}a?e?ln(a,g,p):p(a,null):l("no data"+(b?" for file: "+b:""),null)}
function ln(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");za(e,!0,null,null,function(g,l,p){if(p||!l)c(a,"unable to resolve XML reference: "+d[0]+" ("+p+")");else{if(g=d[3])if(p=l.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var v=p[0],w,F=/( [a-z]+=)(['"])(.*?)\2/g;w=F.exec(g);)v=0>v.indexOf(w[1])?v.replace(">",w[0]+">"):v.replace(new RegExp(w[1]+"(['\"])(.*?)\\1"),w[0]);p[0]!=v&&(l=l.replace(p[0],v))}else{c(a,"missing <"+d[1]+"> in "+e);return}l=l.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],l);ln(a,b,c)}})}else c(a,null)}
function mn(a,b,c,d){function e(a){if(void 0===p){var b=l&&kb(l,"machine-warning");p=b&&b[0]||l}p&&(p.innerHTML=ka(a))}function g(a){e("Error: "+a);v&&(--fn||Ra(!0));v=!1}var l,p,v=!0;fn++;try{if(l=window.document.getElementById(a)){c||(c="/versions/pcjs/1.18.2/components.xsl");var w=function(d,p){if(p){var v=function(d,v){if(v)if(v)if(e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var w=p.transformNode(v);w?(l.outerHTML=w,--fn||Ra(!0)):g("transformNodeToObject failed")}else window.document.implementation&&
function mn(a,b,c,d){function e(a){if(void 0===p){var b=l&&kb(l,"machine-warning");p=b&&b[0]||l}p&&(p.innerHTML=ka(a))}function g(a){e("Error: "+a);v&&(--fn||Ra(!0));v=!1}var l,p,v=!0;fn++;try{if(l=window.document.getElementById(a)){c||(c="/versions/pcjs/1.18.3/components.xsl");var w=function(d,p){if(p){var v=function(d,v){if(v)if(v)if(e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var w=p.transformNode(v);w?(l.outerHTML=w,--fn||Ra(!0)):g("transformNodeToObject failed")}else window.document.implementation&&
window.document.implementation.createDocument?(w=new XSLTProcessor,w.importStylesheet(v),(w=w.transformToFragment(p,window.document))?l.parentNode?(l.parentNode.replaceChild(w,l),--fn||Ra(!0)):g("invalid machine element: "+a):g("transformToFragment failed")):g("unable to transform XML: unsupported browser");else g("failed to load XSL file: "+c);else g(d)};p?gn(c,null,null,!1,e,v):g("failed to load XML file: "+b)}else g(d)};"<"!=b.charAt(0)?gn(b,a,d,!0,e,w):hn(b,null,a,d,!1,e,w)}else g("missing machine element: "+
a)}catch(F){g(F.message)}return v}window.embedPC=function(a,b,c,d){Ra(!1);return mn(a,b,c,d)};window.enableEvents=Ra;window.sendEvent=Ta;})();

View file

@ -1010,21 +1010,21 @@ Zd.prototype={constructor:Zd,set:function(a,b){try{this[this.id][a]=b}catch(c){}
a:JSON.stringify(a)},clear:function(a){Hk(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(m){}b.splice(c,1);c=0}},oc:function(){}};function Hk(a,b){a[a.id]={};b&&a.set("parms",b);a.uk=!1}
function Ik(a){var b=!0;if(ua()){var c=JSON.stringify(a[a.id]);wa(a.key,c)||(ra("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}
function Jk(a,b,c){Ia.call(this,"Computer",a,Jk);this.ha.dc=!1;this.Be=a.busWidth||a.buswidth;this.ad=Kk;this.wh=null;this.li=!1;this.url=b?b.url:null;this.Ar=(Math.random()+.1).toString(36).substr(2,12);this.bd=Lk(this);if(this.U=Ta("CPU",this.id)){this.Ra=Ta("Debugger",this.id);this.la=new Db({id:this.gn+".bus",buswidth:this.Be},this.U,this.Ra);var d,e=Ra(this.id);if((this.ae=Ta("Panel",this.id))&&this.ae.jk)for(b=0;b<e.length;b++)d=e[b],d.wa=this.ae.wa,d.pc=this.ae.pc,d.jk=this.ae.jk;for(b=0;b<
e.length;b++)d=e[b],d.Lc&&d.Lc(this,this.la,this.U,this.Ra);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.Ij=d:this.ad=parseInt(d,10));var m;if(a=La&&La.state||(m=!0,a.state))b=this.Mn=a,m||(this.li=!0,this.ad=Kk),this.ad&&(this.Mj=new Zd(this,"1.18.2"),this.Mj.load()?b=null:delete this.Mj);!b&&this.ad&&(m=null,this.bd&&(m=qa()+"/api/v1/user?req=load&user="+this.bd+"&state="+Gk(this,"1.18.2")),b=m)&&(this.li=!0);b?pa(b,!0,null,this,this.cq):Za(this);c||Mk(this,this.vj)}else ra("Unable to find CPU component")}
e.length;b++)d=e[b],d.Lc&&d.Lc(this,this.la,this.U,this.Ra);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.Ij=d:this.ad=parseInt(d,10));var m;if(a=La&&La.state||(m=!0,a.state))b=this.Mn=a,m||(this.li=!0,this.ad=Kk),this.ad&&(this.Mj=new Zd(this,"1.18.3"),this.Mj.load()?b=null:delete this.Mj);!b&&this.ad&&(m=null,this.bd&&(m=qa()+"/api/v1/user?req=load&user="+this.bd+"&state="+Gk(this,"1.18.3")),b=m)&&(this.li=!0);b?pa(b,!0,null,this,this.cq):Za(this);c||Mk(this,this.vj)}else ra("Unable to find CPU component")}
Qa(Jk);var Kk=0;f=Jk.prototype;f.Vf=function(){return this.Ar};f.ve=function(){return this.bd?this.bd:""};f.cq=function(a,b,c){c?(this.Ij=null,this.li=!1,this.wa("Unable to load machine state from server (error "+c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):this.wh=b;Za(this)};function Mk(a,b,c){for(var d=Ra(a.id),e=0;e<=d.length;e++){var m=e<d.length?d[e]:a;if(!$a(m)){$a(m,function(){Mk(a,b,c)});return}}b.call(a,c)}
function Nk(a,b){var c=new Zd(a,"1.18.2","validate");if(c.load()&&c.parse()){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.wa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
f.vj=function(a){void 0===a&&(a=this.ad||(this.wh?1:Kk));var b=!1,c=!1;this.Vm=!1;var d=this.Mj||new Zd(this,"1.18.2");if(-1==a)b=!0;else if(a>Kk){if(d.load(this.wh)){this.xf=new Zd(this,"1.18.2","failsafe");this.xf.load()&&(Ok(this,d),a=2,Hk(this.xf));this.xf.set("timestamp",la());Ik(this.xf);var e=this.ad&&!this.li;if(1==a||sa("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=d.parse()){var m=d.get("code"),n=d.get("data");m&&("ok"==m?d.load(n):("error"==
function Nk(a,b){var c=new Zd(a,"1.18.3","validate");if(c.load()&&c.parse()){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.wa("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
f.vj=function(a){void 0===a&&(a=this.ad||(this.wh?1:Kk));var b=!1,c=!1;this.Vm=!1;var d=this.Mj||new Zd(this,"1.18.3");if(-1==a)b=!0;else if(a>Kk){if(d.load(this.wh)){this.xf=new Zd(this,"1.18.3","failsafe");this.xf.load()&&(Ok(this,d),a=2,Hk(this.xf));this.xf.set("timestamp",la());Ik(this.xf);var e=this.ad&&!this.li;if(1==a||sa("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=d.parse()){var m=d.get("code"),n=d.get("data");m&&("ok"==m?d.load(n):("error"==
m&&"no machine state"!=n?(this.wa("Error: "+n),"unable to verify user"==n&&(wa("user",""),this.bd=null)):this.pc(m+": "+n),Hk(d),d.load()?(c=d.parse(),e=!0):c=!1))}e&&Nk(this,c?d:null)}else 2==a&&d.clear()}else Nk(this);delete this.wh;delete this.Mj}e=Ra(this.id);for(m=0;m<e.length;m++)n=e[m],n!==this&&n!=this.U&&(c=Pk(this,n,d,b,c));b=[d,a,c];-1!=a?Mk(this,this.Nm,b):this.Nm(b)};
function Pk(a,b,c,d,e){if(!b.ha.dc){b.ha.dc=!0;if(b.gc){var m=null;e&&((m=c.get(b.id))||(m=c.get(b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof m&&(m=null);!b.gc(m,d)&&m&&(ra("Unable to restore state for "+b.type),a.Mn&&!a.wh?(c.clear(),a.ad=Kk,window&&window.location.reload()):a.Vm=!0,b.gc(null),e=!1)}if(!d&&b.Km)for(a=b.Km.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
f.Nm=function(a){var b=a[0],c=0>a[1];a=a[2];this.ha.dc=!0;this.Sm||(this.pc("PCjs v1.18.2\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Sm=!0);this.U&&(Pk(this,this.U,b,c,a),vc(this.U));this.Vm&&(Ok(this,b),b.clear());!c&&this.xf&&(this.xf.clear(),delete this.xf)};
function Ok(a,b){if(sa("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.ve(),d=b.toString(),e={app:"PCjs",ver:"1.18.2"};e.url=a.url;e.user=c;e.type="bug";e.data=d;pa("http://www.pcjs.org/api/v1/report",!0,e)}}
function Qk(a,b,c){var d,e="none",m=new Zd(a,"1.18.2"),n=new Zd(a,"1.18.2","validate"),p=la();n.set("timestamp",p);m.set("timestamp",p);m.set("version","1.18.2");m.set("url",window?window.location.href:null);m.set("browser",window?window.navigator.userAgent:"");a.U&&a.U.fc&&(c&&xc(a.U),d=a.U.fc(b,c),"object"===typeof d&&m.set(a.U.id,d),c&&(a.U.ha.dc=!1,!1===d&&(e=null)));for(var p=Ra(a.id),v=0;v<p.length;v++){var w=p[v];w.ha.dc&&(w.fc&&(d=w.fc(b,c),"object"===typeof d&&m.set(w.id,d)),c&&(w.ha.dc=
f.Nm=function(a){var b=a[0],c=0>a[1];a=a[2];this.ha.dc=!0;this.Sm||(this.pc("PCjs v1.18.3\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Sm=!0);this.U&&(Pk(this,this.U,b,c,a),vc(this.U));this.Vm&&(Ok(this,b),b.clear());!c&&this.xf&&(this.xf.clear(),delete this.xf)};
function Ok(a,b){if(sa("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.ve(),d=b.toString(),e={app:"PCjs",ver:"1.18.3"};e.url=a.url;e.user=c;e.type="bug";e.data=d;pa("http://www.pcjs.org/api/v1/report",!0,e)}}
function Qk(a,b,c){var d,e="none",m=new Zd(a,"1.18.3"),n=new Zd(a,"1.18.3","validate"),p=la();n.set("timestamp",p);m.set("timestamp",p);m.set("version","1.18.3");m.set("url",window?window.location.href:null);m.set("browser",window?window.navigator.userAgent:"");a.U&&a.U.fc&&(c&&xc(a.U),d=a.U.fc(b,c),"object"===typeof d&&m.set(a.U.id,d),c&&(a.U.ha.dc=!1,!1===d&&(e=null)));for(var p=Ra(a.id),v=0;v<p.length;v++){var w=p[v];w.ha.dc&&(w.fc&&(d=w.fc(b,c),"object"===typeof d&&m.set(w.id,d)),c&&(w.ha.dc=
!1,!1===d&&(e=null)))}e&&(c?(p=d=!1,b?(a.bd&&Rk(a,a.bd,m.toString()),Ik(n)&&Ik(m)||(e=null,d=p=!0)):a.ad&&(d=!0,p=3==a.ad),d&&m.clear(p)):e=m.toString());c&&(a.ha.dc=!1);return e}f.reset=function(){this.la&&this.la.reset&&(this.oc("Resetting "+this.la.type),this.la.reset());for(var a=Ra(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.la&&c.reset&&(this.oc("Resetting "+c.type),c.reset())}};
f.start=function(a,b){for(var c=Ra(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};f.stop=function(a,b){for(var c=Ra(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
f.Lb=function(a,b,c){var d=this;switch(b){case "save":return this.qa[b]=c,c.onclick=function(){var a=Lk(d,!0);if(a){var b=!(!d.ad||d.Ij),c=Qk(d,b);b?Rk(d,a,c):d.wa("Resume disabled, machine state not saved")}},!0;case "reset":return this.qa[b]=c,c.onclick=function(){yc(d)},!0}return!1};
function Lk(a,b){var c=a.bd;c||(c=va("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=Sk(a,c))||a.wa("Your user ID has not been approved."))):b&&a.wa("Browser local storage is not available"));return c}
function Sk(a,b){a.bd=null;var c=pa(qa()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(wa("user",c.data),a.bd=c.data)}catch(e){ra(e.message+" ("+d+")")}return a.bd}
function Rk(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Gk(a,"1.18.2");d.data=c;b=pa(qa()+"/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.wa("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.wa(c),wa("user",""),a.bd=null)}}
function Rk(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Gk(a,"1.18.3");d.data=c;b=pa(qa()+"/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.wa("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.wa(c),wa("user",""),a.bd=null)}}
function yc(a){if(a.ad&&!a.Ij){var b=sa("Click OK to save changes to this PCjs machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Qk(a,b,!0);!b&&a.Mn?window&&window.location.reload():(b||(a.vk=!0),a.vj(Kk),a.vk=!1)}else a.reset(),a.U&&vc(a.U)}function gb(a,b,c){a=Ra(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}
Ea(function(){for(var a=Xa(window.document,"pcjs-machine"),b=0;b<a.length;b++)for(var c=a[b],d=Ua(c),c=Xa(c,"pcjs","computer"),e=0;e<c.length;e++){var m=c[e],n=Ua(m),n=new Jk(n,d,!0);Wa(n,m);Mk(n,n.vj)}});Aa.show.push(function(){for(var a=Xa(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=Ua(a[b]);(c=Ta("Computer",c.id))&&c.Sm&&!c.ha.dc&&c.vj(-1)}});
Aa.exit.push(function(){for(var a=Xa(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=Ua(a[b]);(c=Ta("Computer",c.id))&&c.ha.dc&&Qk(c,!(!c.ad||c.Ij),!0)}});var Tk=0;function Uk(a,b,c,d,e,m){e("Loading "+a+"...");pa(a,!0,null,null,function(n,p,v){v?(p||(p="unable to load "+a+" ("+v+")"),m(p,null)):Vk(p,a,b,c,d,e,m)})}
@ -1032,6 +1032,6 @@ function Vk(a,b,c,d,e,m,n){function p(a,m){if(m)n(m,null);else{if(c){var p=b;p&&
null,a=N.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);n(a,p)}}a?e?Wk(a,m,p):p(a,null):n("no data"+(b?" for file: "+b:""),null)}
function Wk(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");pa(e,!0,null,null,function(m,n,p){if(p||!n)c(a,"unable to resolve XML reference: "+d[0]+" ("+p+")");else{if(m=d[3])if(p=n.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var v=p[0],w,G=/( [a-z]+=)(['"])(.*?)\2/g;w=G.exec(m);)v=0>v.indexOf(w[1])?v.replace(">",w[0]+">"):v.replace(new RegExp(w[1]+"(['\"])(.*?)\\1"),w[0]);p[0]!=v&&(n=n.replace(p[0],v))}else{c(a,"missing <"+d[1]+"> in "+e);return}n=n.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],n);Wk(a,b,c)}})}else c(a,null)}
function Xk(a,b,c,d){function e(a){if(void 0===p){var b=n&&Xa(n,"machine-warning");p=b&&b[0]||n}p&&(p.innerHTML=ja(a))}function m(a){e("Error: "+a);v&&(--Tk||Ga(!0));v=!1}var n,p,v=!0;Tk++;try{if(n=window.document.getElementById(a)){c||(c="/versions/pcjs/1.18.2/components.xsl");var w=function(d,p){if(p){var v=function(d,v){if(v)if(v)if(e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var w=p.transformNode(v);w?(n.outerHTML=w,--Tk||Ga(!0)):m("transformNodeToObject failed")}else window.document.implementation&&
function Xk(a,b,c,d){function e(a){if(void 0===p){var b=n&&Xa(n,"machine-warning");p=b&&b[0]||n}p&&(p.innerHTML=ja(a))}function m(a){e("Error: "+a);v&&(--Tk||Ga(!0));v=!1}var n,p,v=!0;Tk++;try{if(n=window.document.getElementById(a)){c||(c="/versions/pcjs/1.18.3/components.xsl");var w=function(d,p){if(p){var v=function(d,v){if(v)if(v)if(e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var w=p.transformNode(v);w?(n.outerHTML=w,--Tk||Ga(!0)):m("transformNodeToObject failed")}else window.document.implementation&&
window.document.implementation.createDocument?(w=new XSLTProcessor,w.importStylesheet(v),(w=w.transformToFragment(p,window.document))?n.parentNode?(n.parentNode.replaceChild(w,n),--Tk||Ga(!0)):m("invalid machine element: "+a):m("transformToFragment failed")):m("unable to transform XML: unsupported browser");else m("failed to load XSL file: "+c);else m(d)};p?Uk(c,null,null,!1,e,v):m("failed to load XML file: "+b)}else m(d)};"<"!=b.charAt(0)?Uk(b,a,d,!0,e,w):Vk(b,null,a,d,!1,e,w)}else m("missing machine element: "+
a)}catch(G){m(G.message)}return v}window.embedPC=function(a,b,c,d){Ga(!1);return Xk(a,b,c,d)};window.enableEvents=Ga;window.sendEvent=Ha;})();