Starting work on v1.18.1

This commit is contained in:
Jeff Parsons 2015-05-21 11:20:52 -07:00 committed by jeffpar
commit 5f29c9967b
131 changed files with 181 additions and 173 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.0</xsl:variable>
<xsl:variable name="APPVERSION">1.18.1</xsl:variable>
<xsl:variable name="SITEHOST">www.pcjs.org</xsl:variable>
<xsl:template name="componentStyles">

View file

@ -1107,7 +1107,7 @@ g;break;case "EBX":a.O.D=g;break;case "ECX":a.O.G=g;break;case "EDX":a.O.H=g;bre
Jb(a.O));mm(a,gm(a.hd))}}function Fm(a,b,c){var d="tr"==b;b=null!=c?+c:1;var e=1==b?0:1;Ia(b,function(){return mb(a,!0)&&a.dh(e,d,!1)},function(){Yc(a.O);mb(a,!1)})}function um(a,b,c){b.bl=b.Vc||b.Tc;c&&(b.Vc=4==a.O.ta.pa,b.Tc=4==a.O.ta.Bd);b.re=c}
function mm(a,b,c,d){b=Am(a,b,1);if(null!=b.Ca){void 0===d&&(d=1);var e=Gl(a,a.Yn,b.ja,a.ma.Ph),e=256;if(void 0!==c){e=Am(a,c,1);if(null==e.Ca||e.Ca<b.Ca)return;e=e.Ca-b.Ca;if(256<e){a.S("range too large");return}d=-1}var g=b.Ca!=a.hd.Ca;c=0;for(um(a,b,!0);0<e&&d--;){a.Sa(b);var l=b.Ea,p=nb(a,!1)||a.Ec?a.Id:null,v=null!=p?"cycles":null,w=tm(a,b);if(w[0]){var E=w[0]+":",g=!1;w[2]&&(E+=" "+w[2]);a.S(E)}g&&a.S();w[3]&&(v=w[3],p=null);g=im(a,b,v,p);b.re||d||d++;a.S(g);a.hd=b;e-=b.Ea-l;g=!1;c++}}}
function bm(a,b,c){if(c)if(b){0>a.nd&&a.ad.length&&(a.nd=0);if(0>a.nd||b!=a.ad[a.nd])a.ad.splice(0,0,b),a.nd=0;a.nd--}else b=a.ad[a.nd+1];a=b?b.split(0<=b.indexOf("|")?"|":";"):[""];for(var d in a)a[d]=na(a[d]);return a}
function Kl(a,b){var c=!0;try{if(b.length||(a.vg?(a.S("ended assemble @"+gm(a.Kf)),a.hd=a.Kf,a.vg=!1):b="?"),b=b.toLowerCase(),pb(a)&&0<b.length){if(a.vg)b="a "+gm(a.Kf)+" "+b;else{var d,e,g;switch(b){case "reset":return a.Fa&&a.Fa.reset(),!0;case "ver":return a.S("PCjs version 1.18.0 ("+a.O.qa+",RELEASE,NOPREFETCH"+(sb?",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 Kl(a,b){var c=!0;try{if(b.length||(a.vg?(a.S("ended assemble @"+gm(a.Kf)),a.hd=a.Kf,a.vg=!1):b="?"),b=b.toLowerCase(),pb(a)&&0<b.length){if(a.vg)b="a "+gm(a.Kf)+" "+b;else{var d,e,g;switch(b){case "reset":return a.Fa&&a.Fa.reset(),!0;case "ver":return a.S("PCjs version 1.18.1 ("+a.O.qa+",RELEASE,NOPREFETCH"+(sb?",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=Am(a,l[1],1);if(null!=p.Ca)if(a.Kf=p,void 0===l[2])a.S("begin assemble @"+gm(p)),a.vg=!0,Yc(a.O);else{var v;a.S("not supported yet");v=[];if(v.length){for(var w=0;w<v.length;w++)a.Yc(p,v[w],1);a.S(im(a,a.Kf))}}break;case "b":a:{var E=l[1],O=l[0].charAt(1);if(O&&"?"!=O)if("l"==O)w=0,w+=rm(a,a.Ic),w+=rm(a,a.Ne),(w+=rm(a,a.wd))||a.S("no breakpoints");else if(void 0===E)a.S("missing breakpoint address");else{w={};if("*"!=E&&(w=Am(a,E,1),
null==w.Ca))break a;E=null==w.Ca?E:fa(w.Ca);"c"==O?null==w.Ca?(Hl(a),a.S("all breakpoints cleared")):pm(a,a.Ic,w,!0)||pm(a,a.Ne,w,!0)||pm(a,a.wd,w,!0)||a.S("breakpoint missing: "+gm(w)):"i"==O?a.S("breakpoint "+(lc(a.ma,w.Ca)?"enabled":"cleared")+": port "+E+" (input)"):"o"==O?a.S("breakpoint "+(pc(a.ma,w.Ca)?"enabled":"cleared")+": port "+E+" (output)"):null!=w.Ca&&("p"==O?a.Te(a.Ic,w):"r"==O?a.Te(a.Ne,w):"w"==O?a.Te(a.wd,w):a.S("unknown breakpoint command: "+O))}else a.S("\nbreakpoint commands:"),
a.S("\tbi [p]\ttoggle break on input port [p]"),a.S("\tbo [p]\ttoggle break on output port [p]"),a.S("\tbp [a]\tset exec breakpoint at addr [a]"),a.S("\tbr [a]\tset read breakpoint at addr [a]"),a.S("\tbw [a]\tset write breakpoint at addr [a]"),a.S("\tbc [a]\tclear breakpoint at addr [a]"),a.S("\tbl\tlist all breakpoints")}break;case "c":a.Ch&&(a.Ch.value="");break;case "d":a:{var J=l[0],w=l[1],G=l[2],T;if("?"==w){w="";for(T in Rl)a.Ak[T]&&(w&&(w+=","),w+=T);w+=",state,symbols";a.S("\ndump commands:");
@ -1125,21 +1125,21 @@ Ge.prototype={constructor:Ge,set:function(a,b){try{this[this.id][a]=b}catch(c){}
a:JSON.stringify(a)},clear:function(a){Im(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}},sa:function(a){return this.X?this.X.sa(null==a?16777216:a|16777216):!1},$a:function(a){this.X&&this.X.message(a)}};function Im(a,b){a[a.id]={};b&&a.set("parms",b);a.al=!1}
function Jm(a){var b=!0;if(Ea()){var c=JSON.stringify(a[a.id]);Ga(a.key,c)||(Aa("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}
function Km(a,b,c){Wa.call(this,"Computer",a,Km,67108864);this.ea.gc=!1;this.ze=a.busWidth||a.buswidth;this.rd=Lm;this.hi=null;this.Vi=!1;this.url=b?b.url:null;this.ps=(Math.random()+.1).toString(36).substr(2,12);this.sd=Mm(this);if(this.O=gb("CPU",this.id)){this.X=gb("Debugger",this.id);this.ma=new Xb({id:this.Un+".bus",buswidth:this.ze},this.O,this.X);var d,e=eb(this.id);if((this.Ee=gb("Panel",this.id))&&this.Ee.Ch)for(b=0;b<e.length;b++)d=e[b],d.Ba=this.Ee.Ba,d.S=this.Ee.S,d.Ch=this.Ee.Ch;for(b=
0;b<e.length;b++)d=e[b],d.Gc&&d.Gc(this,this.ma,this.O,this.X);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.kk=d:this.rd=parseInt(d,10));var g;if(a=Za&&Za.state||(g=!0,a.state))b=this.Do=a,g||(this.Vi=!0,this.rd=Lm),this.rd&&(this.ok=new Ge(this,"1.18.0"),this.ok.load()?b=null:delete this.ok);!b&&this.rd&&(g=null,this.sd&&(g=za()+"/api/v1/user?req=load&user="+this.sd+"&state="+Hm(this,"1.18.0")),b=g)&&(this.Vi=!0);b?ya(b,!0,null,this,this.Tq):ob(this);c||Nm(this,this.dk)}else Aa("Unable to find CPU component")}
0;b<e.length;b++)d=e[b],d.Gc&&d.Gc(this,this.ma,this.O,this.X);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.kk=d:this.rd=parseInt(d,10));var g;if(a=Za&&Za.state||(g=!0,a.state))b=this.Do=a,g||(this.Vi=!0,this.rd=Lm),this.rd&&(this.ok=new Ge(this,"1.18.1"),this.ok.load()?b=null:delete this.ok);!b&&this.rd&&(g=null,this.sd&&(g=za()+"/api/v1/user?req=load&user="+this.sd+"&state="+Hm(this,"1.18.1")),b=g)&&(this.Vi=!0);b?ya(b,!0,null,this,this.Tq):ob(this);c||Nm(this,this.dk)}else Aa("Unable to find CPU component")}
db(Km);var Lm=0;f=Km.prototype;f.Cg=function(){return this.ps};f.ff=function(){return this.sd?this.sd:""};f.Tq=function(a,b,c){c?(this.kk=null,this.Vi=!1,this.Ba("Unable to load machine state from server (error "+c+(b?": "+na(b):"")+")")):this.hi=b;ob(this)};function Nm(a,b,c){for(var d=eb(a.id),e=0;e<=d.length;e++){var g=e<d.length?d[e]:a;if(!pb(g)){pb(g,function(){Nm(a,b,c)});return}}b.call(a,c)}
function Om(a,b){var c=new Ge(a,"1.18.0","validate");if(c.load()&&c.parse()){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.Ba("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
f.dk=function(a){void 0===a&&(a=this.rd||(this.hi?1:Lm));var b=!1,c=!1;this.Jn=!1;var d=this.ok||new Ge(this,"1.18.0");if(-1==a)b=!0;else if(a>Lm){if(d.load(this.hi)){this.ag=new Ge(this,"1.18.0","failsafe");this.ag.load()&&(Pm(this,d),a=2,Im(this.ag));this.ag.set("timestamp",ta());Jm(this.ag);var e=this.rd&&!this.Vi;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 Om(a,b){var c=new Ge(a,"1.18.1","validate");if(c.load()&&c.parse()){var d=c.get("timestamp"),e=b?b.get("timestamp"):"unknown";d!=e&&(a.Ba("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
f.dk=function(a){void 0===a&&(a=this.rd||(this.hi?1:Lm));var b=!1,c=!1;this.Jn=!1;var d=this.ok||new Ge(this,"1.18.1");if(-1==a)b=!0;else if(a>Lm){if(d.load(this.hi)){this.ag=new Ge(this,"1.18.1","failsafe");this.ag.load()&&(Pm(this,d),a=2,Im(this.ag));this.ag.set("timestamp",ta());Jm(this.ag);var e=this.rd&&!this.Vi;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.Ba("Error: "+l),"unable to verify user"==l&&(Ga("user",""),this.sd=null)):this.S(g+": "+l),Im(d),d.load()?(c=d.parse(),e=!0):c=!1))}e&&Om(this,c?d:null)}else 2==a&&d.clear()}else Om(this);delete this.hi;delete this.ok}e=eb(this.id);for(g=0;g<e.length;g++)l=e[g],l!==this&&l!=this.O&&(c=Qm(this,l,d,b,c));b=[d,a,c];-1!=a?Nm(this,this.An,b):this.An(b)};
function Qm(a,b,c,d,e){if(!b.ea.gc){b.ea.gc=!0;if(b.jc){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.jc(g,d)&&g&&(Aa("Unable to restore state for "+b.type),a.Do&&!a.hi?(c.clear(),a.rd=Lm,window&&window.location.reload()):a.Jn=!0,b.jc(null),e=!1)}if(!d&&b.vn)for(a=b.vn.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
f.An=function(a){var b=a[0],c=0>a[1];a=a[2];this.ea.gc=!0;this.Gn||(this.S("PCjs v1.18.0\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Gn=!0);this.O&&(Qm(this,this.O,b,c,a),Zc(this.O));this.Jn&&(Pm(this,b),b.clear());!c&&this.ag&&(this.ag.clear(),delete this.ag)};
function Pm(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.ff(),d=b.toString(),e={app:"PCjs",ver:"1.18.0"};e.url=a.url;e.user=c;e.type="bug";e.data=d;ya("http://www.pcjs.org/api/v1/report",!0,e)}}
function Gm(a,b,c){var d,e="none",g=new Ge(a,"1.18.0"),l=new Ge(a,"1.18.0","validate"),p=ta();l.set("timestamp",p);g.set("timestamp",p);g.set("version","1.18.0");g.set("url",window?window.location.href:null);g.set("browser",window?window.navigator.userAgent:"");a.O&&a.O.ic&&(c&&a.O.vb(),d=a.O.ic(b,c),"object"===typeof d&&g.set(a.O.id,d),c&&(a.O.ea.gc=!1,!1===d&&(e=null)));for(var p=eb(a.id),v=0;v<p.length;v++){var w=p[v];w.ea.gc&&(w.ic&&(d=w.ic(b,c),"object"===typeof d&&g.set(w.id,d)),c&&(w.ea.gc=
f.An=function(a){var b=a[0],c=0>a[1];a=a[2];this.ea.gc=!0;this.Gn||(this.S("PCjs v1.18.1\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Gn=!0);this.O&&(Qm(this,this.O,b,c,a),Zc(this.O));this.Jn&&(Pm(this,b),b.clear());!c&&this.ag&&(this.ag.clear(),delete this.ag)};
function Pm(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.ff(),d=b.toString(),e={app:"PCjs",ver:"1.18.1"};e.url=a.url;e.user=c;e.type="bug";e.data=d;ya("http://www.pcjs.org/api/v1/report",!0,e)}}
function Gm(a,b,c){var d,e="none",g=new Ge(a,"1.18.1"),l=new Ge(a,"1.18.1","validate"),p=ta();l.set("timestamp",p);g.set("timestamp",p);g.set("version","1.18.1");g.set("url",window?window.location.href:null);g.set("browser",window?window.navigator.userAgent:"");a.O&&a.O.ic&&(c&&a.O.vb(),d=a.O.ic(b,c),"object"===typeof d&&g.set(a.O.id,d),c&&(a.O.ea.gc=!1,!1===d&&(e=null)));for(var p=eb(a.id),v=0;v<p.length;v++){var w=p[v];w.ea.gc&&(w.ic&&(d=w.ic(b,c),"object"===typeof d&&g.set(w.id,d)),c&&(w.ea.gc=
!1,!1===d&&(e=null)))}e&&(c?(p=d=!1,b?(a.sd&&Rm(a,a.sd,g.toString()),Jm(l)&&Jm(g)||(e=null,d=p=!0)):a.rd&&(d=!0,p=3==a.rd),d&&g.clear(p)):e=g.toString());c&&(a.ea.gc=!1);return e}f.reset=function(){this.ma&&this.ma.reset&&(this.$a("Resetting "+this.ma.type),this.ma.reset());for(var a=eb(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.ma&&c.reset&&(this.$a("Resetting "+c.type),c.reset())}};
f.start=function(a,b){for(var c=eb(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=eb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
f.Ib=function(a,b,c){var d=this;switch(b){case "save":return this.ua[b]=c,c.onclick=function(){var a=Mm(d,!0);if(a){var b=!(!d.rd||d.kk),c=Gm(d,b);b?Rm(d,a,c):d.Ba("Resume disabled, machine state not saved")}},!0;case "reset":return this.ua[b]=c,c.onclick=function(){dd(d)},!0}return!1};
function Mm(a,b){var c=a.sd;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=Sm(a,c))||a.Ba("Your user ID has not been approved."))):b&&a.Ba("Browser local storage is not available"));return c}
function Sm(a,b){a.sd=null;var c=ya(za()+"/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.sd=c.data)}catch(e){Aa(e.message+" ("+d+")")}return a.sd}
function Rm(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Hm(a,"1.18.0");d.data=c;b=ya(za()+"/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.Ba("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.Ba(c),Ga("user",""),a.sd=null)}}
function Rm(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Hm(a,"1.18.1");d.data=c;b=ya(za()+"/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.Ba("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.Ba(c),Ga("user",""),a.sd=null)}}
function dd(a){if(a.rd&&!a.kk){var b=Ca("Click OK to save changes to this PCjs machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Gm(a,b,!0);!b&&a.Do?window&&window.location.reload():(b||(a.cl=!0),a.dk(Lm),a.cl=!1)}else a.reset(),a.O&&Zc(a.O)}function xb(a,b,c){a=eb(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=hb(c),c=kb(c,"pcjs","computer"),e=0;e<c.length;e++){var g=c[e],l=hb(g),l=new Km(l,d,!0);ib(l,g);Nm(l,l.dk)}});La.show.push(function(){for(var a=kb(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=hb(a[b]);(c=gb("Computer",c.id))&&c.Gn&&!c.ea.gc&&c.dk(-1)}});
La.exit.push(function(){for(var a=kb(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=hb(a[b]);(c=gb("Computer",c.id))&&c.ea.gc&&Gm(c,!(!c.rd||c.kk),!0)}});var Tm=0;function Um(a,b,c,d,e,g){e("Loading "+a+"...");ya(a,!0,null,null,function(l,p,v){v?(p||(p="unable to load "+a+" ("+v+")"),g(p,null)):Vm(p,a,b,c,d,e,g)})}
@ -1147,6 +1147,6 @@ function Vm(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=O.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);l(a,p)}}a?e?Ym(a,g,p):p(a,null):l("no data"+(b?" for file: "+b:""),null)}
function Ym(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");ya(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,E=/( [a-z]+=)(['"])(.*?)\2/g;w=E.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);Ym(a,b,c)}})}else c(a,null)}
function Zm(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&&(--Tm||Ta(!0));v=!1}var l,p,v=!0;Tm++;try{if(l=window.document.getElementById(a)){c||(c="/versions/pcjs/1.18.0/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,--Tm||Ta(!0)):g("transformNodeToObject failed")}else window.document.implementation&&
function Zm(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&&(--Tm||Ta(!0));v=!1}var l,p,v=!0;Tm++;try{if(l=window.document.getElementById(a)){c||(c="/versions/pcjs/1.18.1/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,--Tm||Ta(!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),--Tm||Ta(!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?Um(c,null,null,!1,e,v):g("failed to load XML file: "+b)}else g(d)};"<"!=b.charAt(0)?Um(b,a,d,!0,e,w):Vm(b,null,a,d,!1,e,w)}else g("missing machine element: "+
a)}catch(E){g(E.message)}return v}window.embedPC=function(a,b,c,d){Ta(!1);return Zm(a,b,c,d)};window.enableEvents=Ta;window.sendEvent=Ua;})();

View file

@ -1002,21 +1002,21 @@ Yd.prototype={constructor:Yd,set:function(a,b){try{this[this.id][a]=b}catch(c){}
a:JSON.stringify(a)},clear:function(a){xk(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}},lc:function(){}};function xk(a,b){a[a.id]={};b&&a.set("parms",b);a.ik=!1}
function yk(a){var b=!0;if(va()){var c=JSON.stringify(a[a.id]);xa(a.key,c)||(sa("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}
function zk(a,b,c){Ha.call(this,"Computer",a,zk);this.ga.ac=!1;this.we=a.busWidth||a.buswidth;this.Xc=Ak;this.jh=null;this.ai=!1;this.url=b?b.url:null;this.fr=(Math.random()+.1).toString(36).substr(2,12);this.Yc=Bk(this);if(this.V=Ta("CPU",this.id)){this.Ta=Ta("Debugger",this.id);this.ma=new Cb({id:this.Wm+".bus",buswidth:this.we},this.V,this.Ta);var d,e=Qa(this.id);if((this.Ud=Ta("Panel",this.id))&&this.Ud.Xj)for(b=0;b<e.length;b++)d=e[b],d.wa=this.Ud.wa,d.mc=this.Ud.mc,d.Xj=this.Ud.Xj;for(b=0;b<
e.length;b++)d=e[b],d.Ec&&d.Ec(this,this.ma,this.V,this.Ta);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.vj=d:this.Xc=parseInt(d,10));var m;if(a=Ka&&Ka.state||(m=!0,a.state))b=this.zn=a,m||(this.ai=!0,this.Xc=Ak),this.Xc&&(this.zj=new Yd(this,"1.18.0"),this.zj.load()?b=null:delete this.zj);!b&&this.Xc&&(m=null,this.Yc&&(m=ra()+"/api/v1/user?req=load&user="+this.Yc+"&state="+wk(this,"1.18.0")),b=m)&&(this.ai=!0);b?qa(b,!0,null,this,this.Np):Ya(this);c||Ck(this,this.lj)}else sa("Unable to find CPU component")}
e.length;b++)d=e[b],d.Ec&&d.Ec(this,this.ma,this.V,this.Ta);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.vj=d:this.Xc=parseInt(d,10));var m;if(a=Ka&&Ka.state||(m=!0,a.state))b=this.zn=a,m||(this.ai=!0,this.Xc=Ak),this.Xc&&(this.zj=new Yd(this,"1.18.1"),this.zj.load()?b=null:delete this.zj);!b&&this.Xc&&(m=null,this.Yc&&(m=ra()+"/api/v1/user?req=load&user="+this.Yc+"&state="+wk(this,"1.18.1")),b=m)&&(this.ai=!0);b?qa(b,!0,null,this,this.Np):Ya(this);c||Ck(this,this.lj)}else sa("Unable to find CPU component")}
Pa(zk);var Ak=0;f=zk.prototype;f.Pf=function(){return this.fr};f.re=function(){return this.Yc?this.Yc:""};f.Np=function(a,b,c){c?(this.vj=null,this.ai=!1,this.wa("Unable to load machine state from server (error "+c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):this.jh=b;Ya(this)};function Ck(a,b,c){for(var d=Qa(a.id),e=0;e<=d.length;e++){var m=e<d.length?d[e]:a;if(!Za(m)){Za(m,function(){Ck(a,b,c)});return}}b.call(a,c)}
function Dk(a,b){var c=new Yd(a,"1.18.0","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.lj=function(a){void 0===a&&(a=this.Xc||(this.jh?1:Ak));var b=!1,c=!1;this.Km=!1;var d=this.zj||new Yd(this,"1.18.0");if(-1==a)b=!0;else if(a>Ak){if(d.load(this.jh)){this.rf=new Yd(this,"1.18.0","failsafe");this.rf.load()&&(Ek(this,d),a=2,xk(this.rf));this.rf.set("timestamp",ma());yk(this.rf);var e=this.Xc&&!this.ai;if(1==a||ta("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 Dk(a,b){var c=new Yd(a,"1.18.1","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.lj=function(a){void 0===a&&(a=this.Xc||(this.jh?1:Ak));var b=!1,c=!1;this.Km=!1;var d=this.zj||new Yd(this,"1.18.1");if(-1==a)b=!0;else if(a>Ak){if(d.load(this.jh)){this.rf=new Yd(this,"1.18.1","failsafe");this.rf.load()&&(Ek(this,d),a=2,xk(this.rf));this.rf.set("timestamp",ma());yk(this.rf);var e=this.Xc&&!this.ai;if(1==a||ta("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&&(xa("user",""),this.Yc=null)):this.mc(m+": "+n),xk(d),d.load()?(c=d.parse(),e=!0):c=!1))}e&&Dk(this,c?d:null)}else 2==a&&d.clear()}else Dk(this);delete this.jh;delete this.zj}e=Qa(this.id);for(m=0;m<e.length;m++)n=e[m],n!==this&&n!=this.V&&(c=Fk(this,n,d,b,c));b=[d,a,c];-1!=a?Ck(this,this.Cm,b):this.Cm(b)};
function Fk(a,b,c,d,e){if(!b.ga.ac){b.ga.ac=!0;if(b.dc){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.dc(m,d)&&m&&(sa("Unable to restore state for "+b.type),a.zn&&!a.jh?(c.clear(),a.Xc=Ak,window&&window.location.reload()):a.Km=!0,b.dc(null),e=!1)}if(!d&&b.zm)for(a=b.zm.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
f.Cm=function(a){var b=a[0],c=0>a[1];a=a[2];this.ga.ac=!0;this.Hm||(this.mc("PCjs v1.18.0\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Hm=!0);this.V&&(Fk(this,this.V,b,c,a),uc(this.V));this.Km&&(Ek(this,b),b.clear());!c&&this.rf&&(this.rf.clear(),delete this.rf)};
function Ek(a,b){if(ta("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.re(),d=b.toString(),e={app:"PCjs",ver:"1.18.0"};e.url=a.url;e.user=c;e.type="bug";e.data=d;qa("http://www.pcjs.org/api/v1/report",!0,e)}}
function Gk(a,b,c){var d,e="none",m=new Yd(a,"1.18.0"),n=new Yd(a,"1.18.0","validate"),p=ma();n.set("timestamp",p);m.set("timestamp",p);m.set("version","1.18.0");m.set("url",window?window.location.href:null);m.set("browser",window?window.navigator.userAgent:"");a.V&&a.V.cc&&(c&&wc(a.V),d=a.V.cc(b,c),"object"===typeof d&&m.set(a.V.id,d),c&&(a.V.ga.ac=!1,!1===d&&(e=null)));for(var p=Qa(a.id),v=0;v<p.length;v++){var w=p[v];w.ga.ac&&(w.cc&&(d=w.cc(b,c),"object"===typeof d&&m.set(w.id,d)),c&&(w.ga.ac=
f.Cm=function(a){var b=a[0],c=0>a[1];a=a[2];this.ga.ac=!0;this.Hm||(this.mc("PCjs v1.18.1\nCopyright \u00a9 2012-2015 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Hm=!0);this.V&&(Fk(this,this.V,b,c,a),uc(this.V));this.Km&&(Ek(this,b),b.clear());!c&&this.rf&&(this.rf.clear(),delete this.rf)};
function Ek(a,b){if(ta("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.re(),d=b.toString(),e={app:"PCjs",ver:"1.18.1"};e.url=a.url;e.user=c;e.type="bug";e.data=d;qa("http://www.pcjs.org/api/v1/report",!0,e)}}
function Gk(a,b,c){var d,e="none",m=new Yd(a,"1.18.1"),n=new Yd(a,"1.18.1","validate"),p=ma();n.set("timestamp",p);m.set("timestamp",p);m.set("version","1.18.1");m.set("url",window?window.location.href:null);m.set("browser",window?window.navigator.userAgent:"");a.V&&a.V.cc&&(c&&wc(a.V),d=a.V.cc(b,c),"object"===typeof d&&m.set(a.V.id,d),c&&(a.V.ga.ac=!1,!1===d&&(e=null)));for(var p=Qa(a.id),v=0;v<p.length;v++){var w=p[v];w.ga.ac&&(w.cc&&(d=w.cc(b,c),"object"===typeof d&&m.set(w.id,d)),c&&(w.ga.ac=
!1,!1===d&&(e=null)))}e&&(c?(p=d=!1,b?(a.Yc&&Hk(a,a.Yc,m.toString()),yk(n)&&yk(m)||(e=null,d=p=!0)):a.Xc&&(d=!0,p=3==a.Xc),d&&m.clear(p)):e=m.toString());c&&(a.ga.ac=!1);return e}f.reset=function(){this.ma&&this.ma.reset&&(this.lc("Resetting "+this.ma.type),this.ma.reset());for(var a=Qa(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.ma&&c.reset&&(this.lc("Resetting "+c.type),c.reset())}};
f.start=function(a,b){for(var c=Qa(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=Qa(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
f.Ib=function(a,b,c){var d=this;switch(b){case "save":return this.qa[b]=c,c.onclick=function(){var a=Bk(d,!0);if(a){var b=!(!d.Xc||d.vj),c=Gk(d,b);b?Hk(d,a,c):d.wa("Resume disabled, machine state not saved")}},!0;case "reset":return this.qa[b]=c,c.onclick=function(){xc(d)},!0}return!1};
function Bk(a,b){var c=a.Yc;c||(c=wa("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=Ik(a,c))||a.wa("Your user ID has not been approved."))):b&&a.wa("Browser local storage is not available"));return c}
function Ik(a,b){a.Yc=null;var c=qa(ra()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(xa("user",c.data),a.Yc=c.data)}catch(e){sa(e.message+" ("+d+")")}return a.Yc}
function Hk(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=wk(a,"1.18.0");d.data=c;b=qa(ra()+"/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),xa("user",""),a.Yc=null)}}
function Hk(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=wk(a,"1.18.1");d.data=c;b=qa(ra()+"/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),xa("user",""),a.Yc=null)}}
function xc(a){if(a.Xc&&!a.vj){var b=ta("Click OK to save changes to this PCjs machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Gk(a,b,!0);!b&&a.zn?window&&window.location.reload():(b||(a.jk=!0),a.lj(Ak),a.jk=!1)}else a.reset(),a.V&&uc(a.V)}function fb(a,b,c){a=Qa(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}
Da(function(){for(var a=Wa(window.document,"pcjs-machine"),b=0;b<a.length;b++)for(var c=a[b],d=Ua(c),c=Wa(c,"pcjs","computer"),e=0;e<c.length;e++){var m=c[e],n=Ua(m),n=new zk(n,d,!0);Va(n,m);Ck(n,n.lj)}});za.show.push(function(){for(var a=Wa(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=Ua(a[b]);(c=Ta("Computer",c.id))&&c.Hm&&!c.ga.ac&&c.lj(-1)}});
za.exit.push(function(){for(var a=Wa(window.document,"pcjs","computer"),b=0;b<a.length;b++){var c=Ua(a[b]);(c=Ta("Computer",c.id))&&c.ga.ac&&Gk(c,!(!c.Xc||c.vj),!0)}});var Jk=0;function Kk(a,b,c,d,e,m){e("Loading "+a+"...");qa(a,!0,null,null,function(n,p,v){v?(p||(p="unable to load "+a+" ("+v+")"),m(p,null)):Lk(p,a,b,c,d,e,m)})}
@ -1024,6 +1024,6 @@ function Lk(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=P.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);n(a,p)}}a?e?Mk(a,m,p):p(a,null):n("no data"+(b?" for file: "+b:""),null)}
function Mk(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");qa(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);Mk(a,b,c)}})}else c(a,null)}
function Nk(a,b,c,d){function e(a){if(void 0===p){var b=n&&Wa(n,"machine-warning");p=b&&b[0]||n}p&&(p.innerHTML=ka(a))}function m(a){e("Error: "+a);v&&(--Jk||Fa(!0));v=!1}var n,p,v=!0;Jk++;try{if(n=window.document.getElementById(a)){c||(c="/versions/pcjs/1.18.0/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,--Jk||Fa(!0)):m("transformNodeToObject failed")}else window.document.implementation&&
function Nk(a,b,c,d){function e(a){if(void 0===p){var b=n&&Wa(n,"machine-warning");p=b&&b[0]||n}p&&(p.innerHTML=ka(a))}function m(a){e("Error: "+a);v&&(--Jk||Fa(!0));v=!1}var n,p,v=!0;Jk++;try{if(n=window.document.getElementById(a)){c||(c="/versions/pcjs/1.18.1/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,--Jk||Fa(!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),--Jk||Fa(!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?Kk(c,null,null,!1,e,v):m("failed to load XML file: "+b)}else m(d)};"<"!=b.charAt(0)?Kk(b,a,d,!0,e,w):Lk(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){Fa(!1);return Nk(a,b,c,d)};window.enableEvents=Fa;window.sendEvent=Ga;})();