Merge branch 'next-release'

This commit is contained in:
Jeff Parsons 2017-01-28 23:22:31 -08:00
commit 4c86ad8212
9 changed files with 52 additions and 38 deletions

View file

@ -1369,7 +1369,7 @@
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">computer</xsl:with-param>
<xsl:with-param name="parms">,autoPower:<xsl:value-of select="$autoPower"/>,busWidth:<xsl:value-of select="$busWidth"/>,resume:<xsl:value-of select="$resume"/>,state:'<xsl:value-of select="$state"/>'</xsl:with-param>
<xsl:with-param name="parms">,autoPower:<xsl:value-of select="$autoPower"/>,busWidth:<xsl:value-of select="$busWidth"/>,resume:'<xsl:value-of select="$resume"/>',state:'<xsl:value-of select="$state"/>'</xsl:with-param>
</xsl:call-template>
</xsl:template>

View file

@ -351,6 +351,7 @@ MarkOut.aHTMLEntities = {
* 'messages' (eg, "disk")
* 'autopower' (eg, true)
* 'autostart' (eg, true)
* 'resume' (eg, "0", "1", "2", "3", or "state.json")
*
* and any other string-based property you wish to pass through to PCjs (via the embedPC() sParms parameter).
*

View file

@ -194,7 +194,20 @@ class ComputerPDP11 extends Component {
if (component.initBus) component.initBus(this, this.bus, this.cpu, this.dbg);
}
this.resume = /** @type {number} */ (this.getMachineParm('resume', parmsComputer, Str.TYPES.NUMBER, ComputerPDP11.RESUME_NONE));
var sStatePath = null;
var sResume = this.getMachineParm('resume', parmsComputer);
if (sResume !== undefined) {
/*
* DEPRECATE: This goofiness is a holdover from when the 'resume' property was a string (either a
* single-digit string or a path); now it's always a number, so it never has a 'length' property and
* the call to parseInt() is unnecessary.
*/
if (sResume.length > 1) {
sStatePath = this.sResumePath = sResume;
} else {
this.resume = parseInt(sResume, 10);
}
}
/*
* The Computer 'state' property allows a state file to be specified independent of the 'resume' feature;
@ -210,7 +223,7 @@ class ComputerPDP11 extends Component {
* OVERRIDES everything; it overrides any 'state' Computer parameter AND it disables resume of any saved state in
* localStorage (in other words, it prevents fAllowResume from being true, and forcing resume off).
*/
var fAllowResume, sStatePath = null;
var fAllowResume;
var sState = this.getMachineParm('state') || (fAllowResume = true) && parmsComputer['state'];
if (sState) {

View file

@ -1376,7 +1376,7 @@
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">computer</xsl:with-param>
<xsl:with-param name="parms">,autoPower:<xsl:value-of select="$autoPower"/>,busWidth:<xsl:value-of select="$busWidth"/>,resume:<xsl:value-of select="$resume"/>,state:'<xsl:value-of select="$state"/>'</xsl:with-param>
<xsl:with-param name="parms">,autoPower:<xsl:value-of select="$autoPower"/>,busWidth:<xsl:value-of select="$busWidth"/>,resume:'<xsl:value-of select="$resume"/>',state:'<xsl:value-of select="$state"/>'</xsl:with-param>
</xsl:call-template>
</xsl:template>

View file

@ -1369,7 +1369,7 @@
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">computer</xsl:with-param>
<xsl:with-param name="parms">,autoPower:<xsl:value-of select="$autoPower"/>,busWidth:<xsl:value-of select="$busWidth"/>,resume:<xsl:value-of select="$resume"/>,state:'<xsl:value-of select="$state"/>'</xsl:with-param>
<xsl:with-param name="parms">,autoPower:<xsl:value-of select="$autoPower"/>,busWidth:<xsl:value-of select="$busWidth"/>,resume:'<xsl:value-of select="$resume"/>',state:'<xsl:value-of select="$state"/>'</xsl:with-param>
</xsl:call-template>
</xsl:template>

View file

@ -1369,7 +1369,7 @@
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">computer</xsl:with-param>
<xsl:with-param name="parms">,autoPower:<xsl:value-of select="$autoPower"/>,busWidth:<xsl:value-of select="$busWidth"/>,resume:<xsl:value-of select="$resume"/>,state:'<xsl:value-of select="$state"/>'</xsl:with-param>
<xsl:with-param name="parms">,autoPower:<xsl:value-of select="$autoPower"/>,busWidth:<xsl:value-of select="$busWidth"/>,resume:'<xsl:value-of select="$resume"/>',state:'<xsl:value-of select="$state"/>'</xsl:with-param>
</xsl:call-template>
</xsl:template>

View file

@ -1369,7 +1369,7 @@
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">computer</xsl:with-param>
<xsl:with-param name="parms">,autoPower:<xsl:value-of select="$autoPower"/>,busWidth:<xsl:value-of select="$busWidth"/>,resume:<xsl:value-of select="$resume"/>,state:'<xsl:value-of select="$state"/>'</xsl:with-param>
<xsl:with-param name="parms">,autoPower:<xsl:value-of select="$autoPower"/>,busWidth:<xsl:value-of select="$busWidth"/>,resume:'<xsl:value-of select="$resume"/>',state:'<xsl:value-of select="$state"/>'</xsl:with-param>
</xsl:call-template>
</xsl:template>

View file

@ -76,7 +76,7 @@ function kc(a,b,c){if(a=a.H[b])a.style.marginTop=c?"0px":"20px",a.style.backgrou
function ac(a,b){var c=a.b[b];c[2]&&c[3]&&(kc(a,b,c[1]=c[0]),c[4]&&c[4].call(a,c[1],c[5]));c[3]=!1}h.mf=function(a){a||this.f.A.T||(a=this.f,a.C.reset(),pc(a),this.b[qc]&&this.b[qc][1]&&rc(this.f))};h.nf=function(){};h.hf=function(a){a||this.f.aa()};
h.ff=function(a){if(!a&&!this.f.A.T)if(this.b[qc]&&this.b[qc][1])rc(this.f);else{if((a=this.F)&&!Ja(a,!0))Ka(a,!0),sc(a,0,null),Ka(a,!1);else try{var b=this.f.pc(1);0<b&&(tc(this.f,b),uc(this.f,b,!0),vc(this.f,b))}catch(c){"number"!=typeof c&&Ga(this.f,c.stack||c.message)}this.stop();this.K&&I(this.K)}};h.gf=function(a){if(a&&!this.f.A.T)if(this.G&&wc(this),a=Zb(this,this.Ua),this.L==Yb)xc(this.C,this.da,a);else{var b=this.f,c=this.da;b.oa++;b.C.Sb(yc(b,c,4),a);b.oa--}};
h.jf=function(a){a||this.f.A.T||(this.I&&wc(this),a=this.L==Yb?zc(this.C,this.da):Ac(this.f,this.da),Zb(this,a))};h.lf=function(a){a||this.f.A.T||hc(this,this.Ua)};h.kf=function(a){a?(this.w=!0,ec(this,!0)):(this.w=!1,ec(this),ic(this,0))};h.pf=function(a,b){this.Ua=a?this.Ua|1<<b:this.Ua&~(1<<b)};function wc(a){var b=1140>=a.f.ia?8:16,c=65472<=a.da&&a.da<65472+b,b=c?1:2,c=c?15:a.C.I;a.b[mc]&&a.b[mc][1]||(b=-b);hc(a,a.da&~c|a.da+b&c)}
function hc(a,b){a.da=b&a.C.I;if(a.B!==a.da){a.B=a.da;b=a.B;for(var c=0;22>c;c++)Bc(a,"A"+c,b&1<<c)}}function Zb(a,b){a.g=b&65535;if(a.D!==a.g){a.D=a.g;b=a.D;for(var c=0;16>c;c++)Bc(a,"D"+c,b&1<<c)}return a.g}function Bc(a,b,c){a.i[b]=c;a.w||jc(a,b,c)}function Nc(a){return void 0!==a.H[Oc]}function ic(a,b){if(Nc(a)){a.Ua=b;for(var c=0;22>c;c++)a.b["S"+c][1]=b&1<<c?1:0;fc(a)}}h.stop=function(){hc(this,this.f.g[7])};h.kd=function(a){this.da=a};h.setData=function(a,b){b?this.Ta=a:this.g=a};
function hc(a,b){a.da=b&a.C.I;if(a.B!==a.da){a.B=a.da;b=a.B;for(var c=0;22>c;c++)Mc(a,"A"+c,b&1<<c)}}function Zb(a,b){a.g=b&65535;if(a.D!==a.g){a.D=a.g;b=a.D;for(var c=0;16>c;c++)Mc(a,"D"+c,b&1<<c)}return a.g}function Mc(a,b,c){a.i[b]=c;a.w||jc(a,b,c)}function Nc(a){return void 0!==a.H[Oc]}function ic(a,b){if(Nc(a)){a.Ua=b;for(var c=0;22>c;c++)a.b["S"+c][1]=b&1<<c?1:0;fc(a)}}h.stop=function(){hc(this,this.f.g[7])};h.kd=function(a){this.da=a};h.setData=function(a,b){b?this.Ta=a:this.g=a};
h.uf=function(a,b){return(b?this.Ta:this.Ua)&65535};h.Eg=function(a){this.Ta=a};function gc(){for(var a=x(document,w,"panel"),b=0;b<a.length;b++){var c=a[b],d=Ea(c),e=Ba(d.id);e||(e=new Rb(d,!0));Fa(e,c)}}var Yb=7,Oc="S0",nc="DEP",qc="ENABLE",oc="EXAM",mc="STEP",Pc={},cc=(Pc[65400]=[null,null,Rb.prototype.uf,Rb.prototype.Eg,"CNSW"],Pc);yb(gc);
function Qc(a,b,c){q.call(this,"Bus",a,16);this.f=b;this.F=c;this.V=+a.busWidth||16;this.M=1<<this.V;this.I=this.M-1;this.j=Rc;this.g=Math.log2(this.j);this.R=this.j>>2;this.i=this.j-1;this.G=this.M/this.j|0;this.U=this.G-1;this.Na=[];this.la=0;this.D=!1;this.N=[];this.Ye=[Sc,Tc,Uc,Vc];this.b=this.v=[];this.B=this.L=this.w=this.O=this.P=0;a=new J(this);Wc(a,this.F);this.b=Array(this.G);this.v=Array(this.G);for(b=0;b<this.G;b++)this.b[b]=this.v[b]=a;this.B=this.M-Rc;Xc(this,this.B,Rc,Yc,this);this.P=
this.O=(this.B&this.I)>>>this.g;this.L=0;this.w=this.I;y(this)}p(Qc,q);function Zc(a,b){if(b!=a.L){for(var c=0;c<a.G;c++)a.v[c]=a.b[c];a.L=0;a.w=a.I;b&&(a.L=b,b=1<<b,a.w=b-1,b-=Rc,a.P=(b&a.w)>>>a.g,a.v[a.P]=a.b[a.O])}}h=Qc.prototype;h.reset=function(){for(var a=0;a<this.N.length;a++)this.N[a]();Zc(this,16)};h.Ca=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};h.Ba=function(a){return a?this.save():!0};h.save=function(){var a=new G(this);a.set(0,$c(this));return a.data()};
@ -321,17 +321,17 @@ Fj(a,g[1],!0);if(r)if(a.N=r,void 0===g[2])a.u("begin assemble at "+Ij(a,r)),a.O=
else{var H=C.charAt(1);if("l"==H){var ob;ob=0+gk(a,a.g);ob+=gk(a,a.L);(ob+=gk(a,a.D))||a.u("no breakpoints")}else if("n"==H){var vd=+z||0;z&&(a.Y=vd);a.u("break after "+vd+" instruction(s)")}else if(void 0===z)a.u("missing breakpoint address");else{var na=W();if("*"!=z&&(na=Fj(a,z,!0),!na))break a;"c"==H?null==na.J?(wj(a),a.u("all breakpoints cleared")):ek(a,a.g,na)||ek(a,a.L,na)||ek(a,a.D,na)||a.u("breakpoint missing: "+Ij(a,na)):null!=na.J&&(Hj(a,na,B),"p"==H?a.wb(a.g,na):"r"==H?a.wb(a.L,na):"w"==
H?a.wb(a.D,na):a.u("unknown breakpoint command: "+H))}}}break;case "c":a.Qa&&(a.Qa.value="");break;case "d":a:{var Sb,bb=g[0],Ma=g[1],cb=g[2],al=g[3];if("?"==Ma){var Tb="";for(Sb in Qb)a.ia[Sb]&&(Tb&&(Tb+=","),Tb+=Sb);Tb+=",state,symbols";a.u("dump memory commands:");a.u("\tda [a] dump info for address a");a.u("\tdb [a] [n] dump n bytes at address a");a.u("\tdw [a] [n] dump n words at address a");a.u("\tdd [a] [n] dump n dwords at address a");a.u("\tds [a] [n] dump n words at address a as JSON");
a.u("\tdh [p] [n] dump n instructions from history position p");Tb.length&&a.u("dump extension commands:\n\t"+Tb)}else if("state"==Ma){var Ye=Ck(a.K,!0);"console"==cb?console.log(Ye):(a.Qa&&(a.Qa.value=""),Ye&&a.u(Ye))}else if("symbols"==Ma)for(var Ze=0;Ze<a.B.length;Ze++){var $e=a.B[Ze],Ub;for(Ub in $e.ea)if("."!=Ub.charAt(0)){var pi=$e.ea[Ub].o;if(void 0!==pi){var qi=$e.ea[Ub].l;qi&&(Ub=qi);a.u(K(a,pi)+" "+Ub)}}}else{if("d"==bb){for(Sb in Qb)if(g[1]==Sb){var ri=a.ia[Sb];ri?(g.shift(),g.shift(),
ri(g)):a.u("no dump registered for "+Ma);break a}Ma||(bb=a.Ia||"dw")}else a.Ia=bb;if("dh"==bb){var si=Ma,ti=cb,ui="",vi=0,Ca=a.P,Na=a.i;if(Na.length){var wa=+si||a.oa,Cc=+ti||10;isNaN(wa)?wa=Cc:ui="more ";wa>Na.length&&(a.u("note: only "+Na.length+" available"),wa=Na.length);Ca-=wa;0>Ca&&(null==Na[Na.length-1].J?(wa=Ca+wa,Ca=0):Ca+=Na.length);var af=[];"call"==ti&&(Cc=1E5,af=["CALL"]);for(void 0!==si&&a.u(wa+" instructions earlier:");0<Cc&&Ca!=a.P;){var wi=Na[Ca++];if(null==wi.J)break;var Dc=W(wi.J),
bl=wa--,xi=ik(a,Dc,"history",bl);(!af.length||0<=xi.indexOf(af[0]))&&a.u(xi);Dc.ad&&(Ca+=Dc.ad,Cc-=Dc.ad,wa-=Dc.ad);Ca>=Na.length&&(Ca=0);a.oa=wa;vi++;Cc--}}vi||(a.u("no "+ui+"history available"),a.oa=void 0)}else{var ia=Fj(a,Ma);if(ia)if("da"==bb){var bf=ia.Ka||65535<ia.J,M=Ne(a.f,ia.J||0,bf);a.u(Ya("",bf?12:19)+Qa(ia.J,bf?22:17,3)+" "+E(ia.J,8));6>M.length?(2<M.length&&(a.u(" OFFSET: "+Qa(M[3],13,3)+" "+E(M[3],8)),a.u("UNIMAP["+Ra(M[1])+"]: "+Qa(M[2],22,3)+" "+E(M[2],8))),a.u(" PHYSICAL: "+
ri(g)):a.u("no dump registered for "+Ma);break a}Ma||(bb=a.Ia||"dw")}else a.Ia=bb;if("dh"==bb){var si=Ma,ti=cb,ui="",vi=0,Ca=a.P,Na=a.i;if(Na.length){var wa=+si||a.oa,Bc=+ti||10;isNaN(wa)?wa=Bc:ui="more ";wa>Na.length&&(a.u("note: only "+Na.length+" available"),wa=Na.length);Ca-=wa;0>Ca&&(null==Na[Na.length-1].J?(wa=Ca+wa,Ca=0):Ca+=Na.length);var af=[];"call"==ti&&(Bc=1E5,af=["CALL"]);for(void 0!==si&&a.u(wa+" instructions earlier:");0<Bc&&Ca!=a.P;){var wi=Na[Ca++];if(null==wi.J)break;var Cc=W(wi.J),
bl=wa--,xi=ik(a,Cc,"history",bl);(!af.length||0<=xi.indexOf(af[0]))&&a.u(xi);Cc.ad&&(Ca+=Cc.ad,Bc-=Cc.ad,wa-=Cc.ad);Ca>=Na.length&&(Ca=0);a.oa=wa;vi++;Bc--}}vi||(a.u("no "+ui+"history available"),a.oa=void 0)}else{var ia=Fj(a,Ma);if(ia)if("da"==bb){var bf=ia.Ka||65535<ia.J,M=Ne(a.f,ia.J||0,bf);a.u(Ya("",bf?12:19)+Qa(ia.J,bf?22:17,3)+" "+E(ia.J,8));6>M.length?(2<M.length&&(a.u(" OFFSET: "+Qa(M[3],13,3)+" "+E(M[3],8)),a.u("UNIMAP["+Ra(M[1])+"]: "+Qa(M[2],22,3)+" "+E(M[2],8))),a.u(" PHYSICAL: "+
Qa(M[0],22,3)+" "+E(M[0],8))):(a.u(" OFFSET: "+Qa(M[1],13,3)+" "+E(M[1],8)),a.u("+ "+Dk[M[2]]+"PAR"+M[3]+": "+Qa(M[4],22,3)+" "+E(M[4],8)),a.u("& MMUMASK: "+Qa(M[5],22,3)+" "+E(M[5],8)),a.u("= PHYSICAL: "+Qa(M[0],22,3)+" "+E(M[0],8)))}else{var qb=0,cf="ds"==bb;if(cb){if("l"==cb.charAt(0))cb=cb.substr(1)||al,qb=rj(a,cb);else{var yi=Fj(a,cb);yi&&(qb=yi.J-ia.J)}0>qb&&(qb=0);65536<qb&&(qb=65536)}var dl=a.Aa;ia.Aa&&(a.Aa=ia.Aa);for(var rb="dd"==bb?4:"db"==bb?1:2,Od=rb*qb||128,df=
cf?16:a.Aa,el=(Od+df-1)/df|0||1,sb="";el--&&0<Od;){for(var tb="",ef="",Ma=Ij(a,ia),Pd=df,Ec=0,Fc=0;0<Pd&&0<Od;){var Vb=1,Qd=1==rb?a.sd(ia,Vb):a.Oa(ia,Vb=2),Ec=Ec|Qd<<(Fc<<3),Fc=Fc+Vb;Fc==rb&&(cf?(tb&&(tb+=","),tb+="0x"+F(Ec,2*rb)):(tb+=K(a,Ec,rb),tb+=1==rb?9==Pd?"-":" ":" "),Ec=Fc=0);Pd-=Vb;for(Od-=Vb;1==rb&&Vb--;)var ff=Qd&255,ef=ef+(32<=ff&&128>ff?String.fromCharCode(ff):"."),Qd=Qd>>8}sb&&(sb+="\n");sb=cf?sb+(tb+","):sb+(Ma+": "+tb+(Pd?"":" "+ef))}sb&&a.u(sb);a.va=ia;a.Aa=dl}}}}break;case "e":if("else"==
g[0])break;var Wb,gf,hf,jf,kf=g[0],lf=g[1];"eb"==kf?(Wb=1,gf=255,hf=a.sd,jf=a.td):"e"==kf||"ew"==kf?(Wb=2,gf=65535,hf=a.Oa,jf=a.se):lf=null;if(null==lf)a.u("edit memory commands:"),a.u("\teb [a] [...] edit bytes at address a"),a.u("\tew [a] [...] edit words at address a");else{var Rd=Fj(a,lf);if(Rd)for(var Sd=2;Sd<g.length;Sd++){var Gc=pj(a,g[Sd]);if(void 0===Gc){a.u("unrecognized value: "+g[Sd]);break}Gc&~gf&&a.u("warning: "+F(Gc)+" exceeds "+Wb+"-byte value");a.u("changing "+Ij(a,Rd)+(A(a,16)?
"":" from "+K(a,hf.call(a,Rd),Wb))+" to "+K(a,Gc,Wb));jf.call(a,Rd,Gc,Wb)}}break;case "g":a:{var zi=g[1],fl=b;if(void 0!==zi){var mf=Fj(a,zi,!0);if(!mf)break a;Hj(a,mf,fl);a.wb(a.g,mf,!0)}Xj(a,!0,c)}break;case "h":a.A.T?(c||a.u("halting"),a.aa()):Ja(a,!0)||c||a.u("already halted");break;case "i":if("if"==g[0]){var nf;var Hc=b.substr(2),Hc=Za(Hc);pj(a,Hc)?(c||a.u("true: "+Hc),nf=!0):(c||a.u("false: "+Hc),nf=!1);nf||(d=!1);break}f=!0;break;case "k":var gl=g[0];if("?"==g[1])a.u("stack trace commands:"),
a.u("\tk\tshow frame addresses"),a.u("\tks\tshow symbol information");else{var of=0,pf=W(),Ic=W(a.f.g[6]);for(a.u("stack trace for "+Ij(a,Ic));10>of;){for(var ub=null,hl=256;65536>Ic.J>>>0;){pf.J=a.Oa(Ic,2);if(null==Ic.J||!hl--)break;if(!(pf.J&1)){for(var il=a,Td=pf,Ai=null,Jc=Td.J,Bi=Jc,qf=1;6>=qf&&Jc;qf++){if(2<qf){Td.J=Jc;var Ud=ik(il,Td);if(0<=Ud.indexOf("JSR")){var Ci=Ud.indexOf(" ");if(Jc+(Ud.indexOf(" ",Ci+1)-Ci-1)/2==Bi){Ai=Ud;break}}}Jc-=2}Td.J=Bi;if(ub=Ai)break}}if(!ub||null==ub)break;var Di=
null;if("ks"==gl){var Ei=ub.match(/[0-9A-F]+$/);Ei&&(Di=zk(a,Ei[0]))}ub=Ya(ub,50)+" ;"+(Di||"stack="+Ij(a,Ic));a.u(ub);of++}of||a.u("no return addresses found")}break;case "l":if("ln"==g[0]){zk(a,g[1],!0);break}f=!0;break;case "m":a:{var Oa,Pa=null,Q=g[1];"?"==Q&&(Q=void 0);if(void 0!==Q){var db=0;if("all"==Q)db=1879046143,Q=null;else if("on"==Q)Pa=!0,Q=null;else if("off"==Q)Pa=!1,Q=null;else{"keys"==Q&&(Q="key");"kbd"==Q&&(Q="keyboard");for(Oa in Qb)if(Q==Oa){db=Qb[Oa];Pa=!!(a.fa&db);break}if(!db){a.u("unknown message category: "+
Q);break a}}if(db)if("on"==g[2])a.fa|=db,Pa=!0;else if("off"==g[2]&&(a.fa&=~db,Pa=!1,1073741824==db)){for(var Fi=1E3<=a.M.length?a.M.length-1E3:0;Fi<a.M.length;)a.u(a.M[Fi++]);a.M=[]}}var jl=0,Kc="";for(Oa in Qb)if(!Q||Q==Oa){var kl=!!(a.fa&Qb[Oa]);if(null===Pa||Pa==kl)Kc&&(Kc+=","),++jl%10||(Kc+="\n\t"),"key"==Oa&&(Oa="keys"),Kc+=Oa}void 0===Q&&a.u("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.u((null!==Pa?Pa?"messages on: ":"messages off: ":"message categories:\n\t")+
(Kc||"none"));xj(a)}break;case "p":if("print"==g[0]){Ak(a,b.substr(5));break}var ll=g[0];if("?"==g[1])a.u("step commands:"),a.u("\tp\tstep over instruction"),a.u("\tpr\tstep over instruction with register update");else{var Gi="pr"==ll?1:0,Hi=1+Gi;if(a.I)a.u("step in progress");else{var Vd=W(a.f.g[7]),Xb=a.Oa(Vd);3==Xb||4==Xb||34816==(Xb&65280)||32256==(Xb&65024)||35072==(Xb&65280)?(a.I=Hi,Gj(Vd,2)):2048==(Xb&65024)&&(ik(a,Vd),a.I=Hi);a.I?(a.wb(a.g,Vd,!0),Xj(a)||(a.K&&oe(a.K),a.I=0)):Bk(a,Gi?"tr":
"t")}}break;case "r":if("reset"==b){a.K&&a.K.reset();break}ak(a,g);break;case "s":a:switch(g[1]){case "base":if(g[2]){var Lc=+g[2];if(8==Lc||10==Lc||16==Lc)a.Aa=Lc;else{a.u("invalid base: "+Lc);break}}a.u("default base: "+a.Aa);break;case "cs":var Mc;void 0!==g[3]&&(Mc=+g[3]);switch(g[2]){case "int":a.f.Gb=Mc;break;case "start":a.f.cc=Mc;break;case "stop":a.f.Jb=Mc;break;default:a.u("unknown cs option");break a}void 0!==Mc&&ge(a.f);a.u("checksums "+(a.f.A.Fb?"enabled":"disabled"));break;case "sp":void 0!==
cf?16:a.Aa,el=(Od+df-1)/df|0||1,sb="";el--&&0<Od;){for(var tb="",ef="",Ma=Ij(a,ia),Pd=df,Dc=0,Ec=0;0<Pd&&0<Od;){var Vb=1,Qd=1==rb?a.sd(ia,Vb):a.Oa(ia,Vb=2),Dc=Dc|Qd<<(Ec<<3),Ec=Ec+Vb;Ec==rb&&(cf?(tb&&(tb+=","),tb+="0x"+F(Dc,2*rb)):(tb+=K(a,Dc,rb),tb+=1==rb?9==Pd?"-":" ":" "),Dc=Ec=0);Pd-=Vb;for(Od-=Vb;1==rb&&Vb--;)var ff=Qd&255,ef=ef+(32<=ff&&128>ff?String.fromCharCode(ff):"."),Qd=Qd>>8}sb&&(sb+="\n");sb=cf?sb+(tb+","):sb+(Ma+": "+tb+(Pd?"":" "+ef))}sb&&a.u(sb);a.va=ia;a.Aa=dl}}}}break;case "e":if("else"==
g[0])break;var Wb,gf,hf,jf,kf=g[0],lf=g[1];"eb"==kf?(Wb=1,gf=255,hf=a.sd,jf=a.td):"e"==kf||"ew"==kf?(Wb=2,gf=65535,hf=a.Oa,jf=a.se):lf=null;if(null==lf)a.u("edit memory commands:"),a.u("\teb [a] [...] edit bytes at address a"),a.u("\tew [a] [...] edit words at address a");else{var Rd=Fj(a,lf);if(Rd)for(var Sd=2;Sd<g.length;Sd++){var Fc=pj(a,g[Sd]);if(void 0===Fc){a.u("unrecognized value: "+g[Sd]);break}Fc&~gf&&a.u("warning: "+F(Fc)+" exceeds "+Wb+"-byte value");a.u("changing "+Ij(a,Rd)+(A(a,16)?
"":" from "+K(a,hf.call(a,Rd),Wb))+" to "+K(a,Fc,Wb));jf.call(a,Rd,Fc,Wb)}}break;case "g":a:{var zi=g[1],fl=b;if(void 0!==zi){var mf=Fj(a,zi,!0);if(!mf)break a;Hj(a,mf,fl);a.wb(a.g,mf,!0)}Xj(a,!0,c)}break;case "h":a.A.T?(c||a.u("halting"),a.aa()):Ja(a,!0)||c||a.u("already halted");break;case "i":if("if"==g[0]){var nf;var Gc=b.substr(2),Gc=Za(Gc);pj(a,Gc)?(c||a.u("true: "+Gc),nf=!0):(c||a.u("false: "+Gc),nf=!1);nf||(d=!1);break}f=!0;break;case "k":var gl=g[0];if("?"==g[1])a.u("stack trace commands:"),
a.u("\tk\tshow frame addresses"),a.u("\tks\tshow symbol information");else{var of=0,pf=W(),Hc=W(a.f.g[6]);for(a.u("stack trace for "+Ij(a,Hc));10>of;){for(var ub=null,hl=256;65536>Hc.J>>>0;){pf.J=a.Oa(Hc,2);if(null==Hc.J||!hl--)break;if(!(pf.J&1)){for(var il=a,Td=pf,Ai=null,Ic=Td.J,Bi=Ic,qf=1;6>=qf&&Ic;qf++){if(2<qf){Td.J=Ic;var Ud=ik(il,Td);if(0<=Ud.indexOf("JSR")){var Ci=Ud.indexOf(" ");if(Ic+(Ud.indexOf(" ",Ci+1)-Ci-1)/2==Bi){Ai=Ud;break}}}Ic-=2}Td.J=Bi;if(ub=Ai)break}}if(!ub||null==ub)break;var Di=
null;if("ks"==gl){var Ei=ub.match(/[0-9A-F]+$/);Ei&&(Di=zk(a,Ei[0]))}ub=Ya(ub,50)+" ;"+(Di||"stack="+Ij(a,Hc));a.u(ub);of++}of||a.u("no return addresses found")}break;case "l":if("ln"==g[0]){zk(a,g[1],!0);break}f=!0;break;case "m":a:{var Oa,Pa=null,Q=g[1];"?"==Q&&(Q=void 0);if(void 0!==Q){var db=0;if("all"==Q)db=1879046143,Q=null;else if("on"==Q)Pa=!0,Q=null;else if("off"==Q)Pa=!1,Q=null;else{"keys"==Q&&(Q="key");"kbd"==Q&&(Q="keyboard");for(Oa in Qb)if(Q==Oa){db=Qb[Oa];Pa=!!(a.fa&db);break}if(!db){a.u("unknown message category: "+
Q);break a}}if(db)if("on"==g[2])a.fa|=db,Pa=!0;else if("off"==g[2]&&(a.fa&=~db,Pa=!1,1073741824==db)){for(var Fi=1E3<=a.M.length?a.M.length-1E3:0;Fi<a.M.length;)a.u(a.M[Fi++]);a.M=[]}}var jl=0,Jc="";for(Oa in Qb)if(!Q||Q==Oa){var kl=!!(a.fa&Qb[Oa]);if(null===Pa||Pa==kl)Jc&&(Jc+=","),++jl%10||(Jc+="\n\t"),"key"==Oa&&(Oa="keys"),Jc+=Oa}void 0===Q&&a.u("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.u((null!==Pa?Pa?"messages on: ":"messages off: ":"message categories:\n\t")+
(Jc||"none"));xj(a)}break;case "p":if("print"==g[0]){Ak(a,b.substr(5));break}var ll=g[0];if("?"==g[1])a.u("step commands:"),a.u("\tp\tstep over instruction"),a.u("\tpr\tstep over instruction with register update");else{var Gi="pr"==ll?1:0,Hi=1+Gi;if(a.I)a.u("step in progress");else{var Vd=W(a.f.g[7]),Xb=a.Oa(Vd);3==Xb||4==Xb||34816==(Xb&65280)||32256==(Xb&65024)||35072==(Xb&65280)?(a.I=Hi,Gj(Vd,2)):2048==(Xb&65024)&&(ik(a,Vd),a.I=Hi);a.I?(a.wb(a.g,Vd,!0),Xj(a)||(a.K&&oe(a.K),a.I=0)):Bk(a,Gi?"tr":
"t")}}break;case "r":if("reset"==b){a.K&&a.K.reset();break}ak(a,g);break;case "s":a:switch(g[1]){case "base":if(g[2]){var Kc=+g[2];if(8==Kc||10==Kc||16==Kc)a.Aa=Kc;else{a.u("invalid base: "+Kc);break}}a.u("default base: "+a.Aa);break;case "cs":var Lc;void 0!==g[3]&&(Lc=+g[3]);switch(g[2]){case "int":a.f.Gb=Lc;break;case "start":a.f.cc=Lc;break;case "stop":a.f.Jb=Lc;break;default:a.u("unknown cs option");break a}void 0!==Lc&&ge(a.f);a.u("checksums "+(a.f.A.Fb?"enabled":"disabled"));break;case "sp":void 0!==
g[2]&&(le(a.f,+g[2])||a.u("warning: using 1x multiplier, previous target not reached"));a.u("target speed: "+(a.f.sb.toFixed(2)+"Mhz")+" ("+a.f.hb+"x)");break;default:if(g[1]){a.u("unknown option: "+g[1]);break}case "?":a.u("debugger options:"),a.u("\tbase #\t\tset default base to #"),a.u("\tcs int #\tset checksum cycle interval to #"),a.u("\tcs start #\tset checksum cycle start count to #"),a.u("\tcs stop #\tset checksum cycle stop count to #"),a.u("\tsp #\t\tset speed multiplier to #")}break;case "t":Bk(a,
g[0],g[1]);break;case "u":bk(a,g[1],g[2],8);break;case "v":if("var"==g[0]){yk(a,b.substr(3))||(d=!1);break}if("ver"==g[0]){a.u((Hb||"PDP11")+" version 1.32.2 ("+a.f.ia+",RELEASE"+(Jb?",TYPEDARRAYS":Ib?",BYTEARRAYS":",LONGARRAYS")+")");a.u(window?window.navigator.userAgent:"");break}f=!0;break;case "?":if(g[1]){Ak(a,b.substr(1));break}var rf="commands:",sf;for(sf in Ek)rf+="\n"+Ya(sf,9)+Ek[sf];vf(a)||(rf+="\nnote: history disabled if no exec breakpoints");a.u(rf);break;default:f=!0}f&&(a.u("unknown command: "+
b),d=!1)}}catch(Ji){a.u("debugger error: "+(Ji.stack||Ji.message)),d=!1}return d}function je(a,b,c){b=nj(a,b,c);for(var d in b)if(!hk(a,b[+d]))return!1;return!0}
@ -340,13 +340,13 @@ Lj=20,Mj=21,Nj=22,Oj=23,Pj=24,Qj=25,Rj=26,Sj=27,Tj=28,Uj=29,Vj=30,Jj={SP:6,PC:7,
448],29184:[101,Y,448],29696:[102,Y,448],30208:[103,Y,448],30720:[104,448,Y],32256:[105,448,mk]},65280:{256:[27,X],512:[24,X],768:[10,X],1024:[11,X],1280:[22,X],1536:[12,X],1792:[20,X],32768:[25,X],33024:[23,X],33280:[13,X],33536:[21,X],33792:[28,X],34048:[29,X],34304:[8,X],34560:[9,X],34816:[106,pk],35072:[107,pk]},65472:{64:[56,Y],192:[95,Y],2560:[39,Y],2624:[49,Y],2688:[53,Y],2752:[51,Y],2816:[67,Y],2880:[1,Y],2944:[77,Y],3008:[97,Y],3072:[73,Y],3136:[71,Y],3200:[6,Y],3264:[4,Y],3328:[58,ok],3392:[60,
Y],3456:[65,Y],3520:[96,Y],35328:[40,Y],35392:[50,Y],35456:[54,Y],35520:[52,Y],35584:[68,Y],35648:[2,Y],35712:[78,Y],35776:[98,Y],35840:[74,Y],35904:[72,Y],35968:[7,Y],36032:[5,Y],36096:[66,Y],36160:[59,Y],36224:[64,Y],36288:[61,Y]},65528:{128:[76,rk],152:[108,nk]},65535:{0:[55],1:[99],2:[75],3:[26],4:[109],5:[70],6:[110],7:[111],160:[69],161:[31],162:[41],163:[33],164:[45],165:[36],166:[43],167:[35],168:[38],169:[32],170:[42],171:[34],172:[46],173:[37],174:[44],175:[30],176:[69],177:[80],178:[88],
179:[82],180:[92],181:[85],182:[90],183:[84],184:[87],185:[81],186:[89],187:[83],188:[93],189:[86],190:[91],191:[79]}},jk=[0],Dj=[58,60,65,96,110,100,101,102,103,104,105],Ej=[108,59,64],Wj=1E3,Zj=">> ";yb(function(){for(var a=x(document,w,"debugger"),b=0;b<a.length;b++){var c=a[b],d=Ea(c),d=new vj(d);Fa(d,c)}});
function Fk(a,b,c){q.call(this,"Computer",a,33554432);this.A.Z=!1;this.O=null;Gk(this,b);this.L=ee(this,"autoPower",a,6);this.j=0;this.U=+a.busWidth||+a.buswidth;this.G=this.D=this.I=null;this.B=this.R=!1;this.w=this.v=null;this.P=this.M=this.N=!1;this.V=ee(this,"url")||"";(Math.random()+.1).toString(36);this.g=Hk(this);if(this.f=Da("CPU",this.id)){this.F=Da("Debugger",this.id);this.C=new Qc({id:this.pb+".bus",busWidth:this.U},this.f,this.F);var d,e=Aa(this.id);if((this.i=Da("Panel",this.id))&&this.i.Qa)for(b=
0;b<e.length;b++)d=e[b],d.S=this.i.S,d.u=this.i.u,d.Qa=this.i.Qa;this.u(Hb+" v1.32.2\nCopyright \u00a9 2012-2017 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");this.u("Portions adapted from the PDP-11/70 Emulator by Paul Nankervis <http://skn.noip.me/pdp11/pdp11.html>");for(b=0;b<e.length;b++)d=e[b],d.za&&d.za(this,this.C,this.f,this.F);this.b=ee(this,"resume",a,4,Ik);var f;b=null;if(a=ee(this,"state")||(f=!0,a.state))this.I=b=a,f||(this.B=!0,this.b=
Ik),this.b&&(this.w=new G(this,"1.32.2"),Jk(this.w)?b=null:delete this.w);!b&&this.b&&(b=Kk(this))&&(this.B=!0);if(b){var g=this;fb(b,null,!0,function(a,b,c){c?(g.D=null,g.B=!1,g.S("Unable to load machine state from server (error "+c+(b?": "+Za(b):"")+")")):(g.G=b,g.R=!0);y(g)})}else y(this);this.H.power||(this.L=!0);!c&&this.L&&Lk(this,this.ec)}else v("Unable to find CPU component")}p(Fk,q);
function Gk(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){v(d.message+" ("+c+")")}}a.O=b}function ee(a,b,c,d,e){var f=b.toLowerCase(),f=nb(b)||nb(f);void 0===f&&a.O&&(f=a.O[b]);void 0===f&&c&&(f=c[b]);void 0===f&&"object"==typeof resources&&resources[b]&&(f=b);void 0===f&&(f=e);if("string"==typeof f&&d)switch(d){case 4:f=+f;isNaN(f)&&(f=e||0);break;case 6:f="true"==f}return f}
function Fk(a,b,c){q.call(this,"Computer",a,33554432);this.A.Z=!1;this.O=null;Gk(this,b);this.L=ee(this,"autoPower",a,6);this.j=0;this.U=+a.busWidth||+a.buswidth;this.G=this.w=this.I=null;this.D=this.R=!1;this.B=this.v=null;this.P=this.M=this.N=!1;this.V=ee(this,"url")||"";(Math.random()+.1).toString(36);this.g=Hk(this);if(this.f=Da("CPU",this.id)){this.F=Da("Debugger",this.id);this.C=new Qc({id:this.pb+".bus",busWidth:this.U},this.f,this.F);var d,e=Aa(this.id);if((this.i=Da("Panel",this.id))&&this.i.Qa)for(b=
0;b<e.length;b++)d=e[b],d.S=this.i.S,d.u=this.i.u,d.Qa=this.i.Qa;this.u(Hb+" v1.32.2\nCopyright \u00a9 2012-2017 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");this.u("Portions adapted from the PDP-11/70 Emulator by Paul Nankervis <http://skn.noip.me/pdp11/pdp11.html>");for(b=0;b<e.length;b++)d=e[b],d.za&&d.za(this,this.C,this.f,this.F);b=null;d=ee(this,"resume",a);void 0!==d&&(1<d.length?b=this.w=d:this.b=parseInt(d,10));var f;if(a=ee(this,"state")||
(f=!0,a.state))this.I=b=a,f||(this.D=!0,this.b=Ik),this.b&&(this.B=new G(this,"1.32.2"),Jk(this.B)?b=null:delete this.B);!b&&this.b&&(b=Kk(this))&&(this.D=!0);if(b){var g=this;fb(b,null,!0,function(a,b,c){c?(g.w=null,g.D=!1,g.S("Unable to load machine state from server (error "+c+(b?": "+Za(b):"")+")")):(g.G=b,g.R=!0);y(g)})}else y(this);this.H.power||(this.L=!0);!c&&this.L&&Lk(this,this.ec)}else v("Unable to find CPU component")}p(Fk,q);
function Gk(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){v(d.message+" ("+c+")")}}a.O=b}function ee(a,b,c,d){var e=b.toLowerCase(),e=nb(b)||nb(e);void 0===e&&a.O&&(e=a.O[b]);void 0===e&&c&&(e=c[b]);void 0===e&&"object"==typeof resources&&resources[b]&&(e=b);void 0===e&&(e=void 0);if("string"==typeof e&&d)switch(d){case 4:e=+e;isNaN(e)&&(e=0);break;case 6:e="true"==e}return e}
function Lk(a,b,c){for(var d=Aa(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!Ia(f)){Ia(f,function(){Lk(a,b,c)});return}}b.call(a,c)}function Mk(a,b){var c=new G(a,"1.32.2",Nk);if(Jk(c)&&Ok(c)){var d=c.get(Pk),e=b?b.get(Pk):"unknown";d!=e&&(a.S("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}h=Fk.prototype;
h.ec=function(a){void 0===a&&(a=this.b||(this.G?Qk:Ik));if(!this.j){this.j++;var b=!1,c=!1;this.N=!1;var d=this.w||new G(this,"1.32.2");if(a==Rk)b=!0;else if(a>Ik){if(Jk(d,this.G)){this.v=new G(this,"1.32.2",Sk);Jk(this.v)&&(Tk(this,d),a=Uk,Vk(this.v));this.v.set(Pk,eb());Wk(this.v);var e=this.b&&!this.B;if(a==Qk||za("Click OK to restore the previous "+Hb+" machine state, or CANCEL to reset the machine.")){if(c=Ok(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?Jk(d,g):("error"==f&&"no machine state"!=
g?(this.S("Error: "+g),"unable to verify user"==g&&(lb(Xk,""),this.g=null)):this.u(f+": "+g),Vk(d),Jk(d)?(c=Ok(d),e=!0):c=!1))}e&&Mk(this,c?d:null)}else a==Uk&&d.clear()}else Mk(this);delete this.G;delete this.w}e=Aa(this.id);for(f=0;f<e.length;f++)g=e[f],g!==this&&g!=this.f&&(c=Yk(this,g,d,b,c));b=[d,a,c];a!=Rk?Lk(this,this.Ud,b):this.Ud(b)}};
h.ec=function(a){void 0===a&&(a=this.b||(this.G?Qk:Ik));if(!this.j){this.j++;var b=!1,c=!1;this.N=!1;var d=this.B||new G(this,"1.32.2");if(a==Rk)b=!0;else if(a>Ik){if(Jk(d,this.G)){this.v=new G(this,"1.32.2",Sk);Jk(this.v)&&(Tk(this,d),a=Uk,Vk(this.v));this.v.set(Pk,eb());Wk(this.v);var e=this.b&&!this.D;if(a==Qk||za("Click OK to restore the previous "+Hb+" machine state, or CANCEL to reset the machine.")){if(c=Ok(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?Jk(d,g):("error"==f&&"no machine state"!=
g?(this.S("Error: "+g),"unable to verify user"==g&&(lb(Xk,""),this.g=null)):this.u(f+": "+g),Vk(d),Jk(d)?(c=Ok(d),e=!0):c=!1))}e&&Mk(this,c?d:null)}else a==Uk&&d.clear()}else Mk(this);delete this.G;delete this.B}e=Aa(this.id);for(f=0;f<e.length;f++)g=e[f],g!==this&&g!=this.f&&(c=Yk(this,g,d,b,c));b=[d,a,c];a!=Rk?Lk(this,this.Ud,b):this.Ud(b)}};
function Yk(a,b,c,d,e){if(!b.A.Z){b.A.Z=!0;var f=null;try{if(e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/[a-z0-9]\./i,".")))),"string"===typeof f&&(f=null),!b.Ca(f,d)&&f&&(v("Unable to restore state for "+b.type),a.I&&!a.R?(c.clear(),a.b=Ik,window&&window.location.reload()):a.N=!0,b.Ca(null),e=!1),!d&&b.Cd){var g=b.Cd.split("|");for(a=0;a<g.length;a++)b.status(g[a])}}catch(k){v("Error restoring state for "+b.type+" ("+k.message+")")}}return e}
h.Ud=function(a){var b=a[0],c=0>a[1];a=a[2];this.P=!0;this.A.Z=!0;var d=this.H.power;d&&(d.textContent="Shutdown");this.f&&(Yk(this,this.f,b,c,a),I(this,-2),this.f.qa());this.N&&(Tk(this,b),b.clear());!c&&this.v&&(this.v.clear(),delete this.v);this.j=0};
function Tk(a,b){if(za("There may be a problem with your "+Hb+" machine.\n\nTo help us diagnose it, click OK to send this "+Hb+" machine state to http://www.pcjs.org.")){var c=a.V;a=a.g||"";b=b.toString();var d={};d.app=Hb;d.ver="1.32.2";d.url=c;d.user=a;d.type="bug";d.data=b;fb("http://www.pcjs.org/api/v1/report",d,!0)}}
@ -354,14 +354,14 @@ function Ck(a,b,c){var d,e="none";if(a.j)return null;a.j--;var f=new G(a,"1.32.2
!1,!1===d&&(e=null)))}e&&(c?(k=d=!1,b?(a.g&&ml(a,a.g,f.toString()),Wk(g)&&Wk(f)||(e=null,d=k=!0)):a.b&&(d=!0,k=a.b==nl),d&&f.clear(k)):e=f.toString());c&&(a.A.Z=!1,b=a.H.power)&&(b.textContent="Power");a.j=0;return e}
h.reset=function(){this.C&&this.C.reset&&(D(this,"Resetting "+this.C.type),this.C.reset());this.f&&this.f.reset&&(D(this,"Resetting "+this.f.type),this.f.reset());for(var a=Aa(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.C&&c!==this.f&&c.reset&&(D(this,"Resetting "+c.type),c.reset())}I(this,-1)};h.start=function(a,b){for(var c=Aa(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}I(this,-1)};
h.stop=function(a,b){for(var c=Aa(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}I(this,-1)};
function I(a,b){if(a.f){var c=a.f,d=b||0,e=c.H.speed;e&&(0>=d||30<=(c.Kc+=d))&&(e.textContent=c.A.T?c.rb.toFixed(2)+"Mhz":"Stopped",c.Kc=0)}if(a.i&&(a=a.i,b=b||0,a.v)){c=a.f.A.T;d=!!(a.f.i&8);if(0>=b||60<=(a.j+=b)){for(e=0;e<a.f.g.length;e++)lc(a,"R"+e,a.f.g[e]);e=Ad(a.f);lc(a,"PS",e);lc(a,"NF",e&8?1:0,1);lc(a,"ZF",e&4?1:0,1);lc(a,"VF",e&2?1:0,1);lc(a,"CF",e&1?1:0,1);a.j=0}-1>b?a.da=a.f.g[7]:0<b&&c&&!d&&(a.da=a.f.cb);hc(a,a.da);Zb(a,a.Ta);b=a.f;b=b.tb?b.V&16?1:2:4;Bc(a,"B22",b&1);Bc(a,"B18",b&2);
Bc(a,"B16",b&4)}}
h.ua=function(a,b,c){var d=this;switch(b){case "power":return this.H[b]=c,c.onclick=function(){d.j||(d.A.Z?Ck(d,!1,!0):Lk(d,d.ec))},!0;case "reset":return this.H[b]=c,c.onclick=function(){if(d.A.Z&&!d.j)if(d.b&&!d.D){var a=za("Click OK to save changes to this "+Hb+" machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Ck(d,a,!0);!a&&d.I?window&&window.location.reload():(a||(d.M=!0),d.ec(Ik),d.M=!1)}else d.reset(),d.f&&d.f.qa()},!0;case "save":if(Va(hb(),"pcjs.org"))c.parentNode.removeChild(c);else return this.H[b]=
c,c.onclick=function(){var a=Hk(d,!0);if(a){var b=!!(d.b&&!d.D||d.I),c=Ck(d,b);b?ml(d,a,c):d.S("Resume disabled, machine state not saved")}},!0}return!1};function Hk(a,b){var c=a.g;c||((c=kb(Xk),void 0!==c)?!c&&b&&(b=null,window&&(b=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c=b)&&((c=ol(a,c))||a.S("The user ID is invalid.")):b&&a.S("Browser local storage is not available"));return c}
function I(a,b){if(a.f){var c=a.f,d=b||0,e=c.H.speed;e&&(0>=d||30<=(c.Kc+=d))&&(e.textContent=c.A.T?c.rb.toFixed(2)+"Mhz":"Stopped",c.Kc=0)}if(a.i&&(a=a.i,b=b||0,a.v)){c=a.f.A.T;d=!!(a.f.i&8);if(0>=b||60<=(a.j+=b)){for(e=0;e<a.f.g.length;e++)lc(a,"R"+e,a.f.g[e]);e=Ad(a.f);lc(a,"PS",e);lc(a,"NF",e&8?1:0,1);lc(a,"ZF",e&4?1:0,1);lc(a,"VF",e&2?1:0,1);lc(a,"CF",e&1?1:0,1);a.j=0}-1>b?a.da=a.f.g[7]:0<b&&c&&!d&&(a.da=a.f.cb);hc(a,a.da);Zb(a,a.Ta);b=a.f;b=b.tb?b.V&16?1:2:4;Mc(a,"B22",b&1);Mc(a,"B18",b&2);
Mc(a,"B16",b&4)}}
h.ua=function(a,b,c){var d=this;switch(b){case "power":return this.H[b]=c,c.onclick=function(){d.j||(d.A.Z?Ck(d,!1,!0):Lk(d,d.ec))},!0;case "reset":return this.H[b]=c,c.onclick=function(){if(d.A.Z&&!d.j)if(d.b&&!d.w){var a=za("Click OK to save changes to this "+Hb+" machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Ck(d,a,!0);!a&&d.I?window&&window.location.reload():(a||(d.M=!0),d.ec(Ik),d.M=!1)}else d.reset(),d.f&&d.f.qa()},!0;case "save":if(Va(hb(),"pcjs.org"))c.parentNode.removeChild(c);else return this.H[b]=
c,c.onclick=function(){var a=Hk(d,!0);if(a){var b=!!(d.b&&!d.w||d.I),c=Ck(d,b);b?ml(d,a,c):d.S("Resume disabled, machine state not saved")}},!0}return!1};function Hk(a,b){var c=a.g;c||((c=kb(Xk),void 0!==c)?!c&&b&&(b=null,window&&(b=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c=b)&&((c=ol(a,c))||a.S("The user ID is invalid.")):b&&a.S("Browser local storage is not available"));return c}
function ol(a,b){a.g=null;b=fb(hb()+"/api/v1/user?req=verify&user="+b);var c=b[1];if(!b[0]&&c)try{b=eval("("+c+")"),b.code&&"ok"==b.code&&(lb(Xk,b.data),a.g=b.data)}catch(d){v(d.message+" ("+c+")")}return a.g}function Kk(a){var b=null;a.g&&(b=hb()+"/api/v1/user?req=load&user="+a.g+"&state="+pl(a,"1.32.2"));return b}
function ml(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=pl(a,"1.32.2");d.data=c;b=fb(hb()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.S("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.S(c),lb(Xk,""),a.g=null)}}
function Sh(a){var b;a=Aa(a.id);for(var c=0;c<a.length;c++){var d=a[c];if(b)b==d&&(b=null);else if("RAM"==d.type)return d}return null}function oe(a,b){if(a.Qa){var c=0,d=0;!b&&window&&(c=window.scrollX,d=window.scrollY);a.Qa.focus();!b&&window&&window.scrollTo(c,d)}}var Sk="failsafe",Nk="validate",Pk="timestamp",Zk="version",$k="url",cl="browser",Xk="user",Rk=-1,Ik=0,Qk=1,Uk=2,nl=3;
yb(function(){for(var a=x(document,w+"-machine"),b=0;b<a.length;b++)for(var c=a[b],d=Ea(c),c=x(c,w,"computer"),e=0;e<c.length;e++){var f=c[e],g=Ea(f),g=new Fk(g,d,!0);Fa(g,f);g.L&&Lk(g,g.ec)}});zb.show.push(function(){for(var a=x(document,w,"computer"),b=0;b<a.length;b++){var c=Ea(a[b]);(c=Da("Computer",c.id))&&c.P&&!c.A.Z&&c.ec(Rk)}});zb.exit.push(function(){for(var a=x(document,w,"computer"),b=0;b<a.length;b++){var c=Ea(a[b]);(c=Da("Computer",c.id))&&c.A.Z&&Ck(c,!(!c.b||c.D),!0)}});
yb(function(){for(var a=x(document,w+"-machine"),b=0;b<a.length;b++)for(var c=a[b],d=Ea(c),c=x(c,w,"computer"),e=0;e<c.length;e++){var f=c[e],g=Ea(f),g=new Fk(g,d,!0);Fa(g,f);g.L&&Lk(g,g.ec)}});zb.show.push(function(){for(var a=x(document,w,"computer"),b=0;b<a.length;b++){var c=Ea(a[b]);(c=Da("Computer",c.id))&&c.P&&!c.A.Z&&c.ec(Rk)}});zb.exit.push(function(){for(var a=x(document,w,"computer"),b=0;b<a.length;b++){var c=Ea(a[b]);(c=Da("Computer",c.id))&&c.A.Z&&Ck(c,!(!c.b||c.w),!0)}});
function G(a,b,c){this.id=a.id;this.b="";this.f={};this.g=this.C=!1;this.key=pl(a,b,c);Vk(this,a.Ue)}h=G.prototype;h.set=function(a,b){try{this.f[a]=b}catch(c){}};h.get=function(a){return this.f[a]||null};h.data=function(){return this.f};function Jk(a,b){return b?(a.b=b,a.g=!0,a.C=!1,!0):a.g?!0:ib()&&(b=kb(a.key))?(a.b=b,a.g=!0):!1}function Ok(a){var b=!0;if(!a.C)try{a.f=JSON.parse(a.b),a.C=!0}catch(c){v(c.message||c),b=!1}return b}
function Wk(a){var b=!0;if(ib()){var c=JSON.stringify(a.f);lb(a.key,c)||(v("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}h.toString=function(){return this.f?JSON.stringify(this.f):this.b};function Vk(a,b){a.b="";a.f={};a.g=a.C=!1;b&&a.set("parms",b)}
h.clear=function(a){Vk(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(e){}b.splice(c,1);c=0}};function pl(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}var ql=0;

View file

@ -250,13 +250,13 @@ h.Wd=function(a,b,c,d,e,f){this.o=f&65535;this.a=this.a&~X.va|f>>16-X.S.va&X.va;
h.yg=function(a){this.a=this.a&~X.Ta|a&X.Ta;this.i=this.i&60|(a&X.va)>>X.S.va;if(!(this.a&X.wa)){a=!0;var b,c=this.b[(this.a&X.Ma)>>X.S.Ma],d=c.V,e,f,g;this.a&=~X.Xa;switch(this.a&X.ra){case Pg.fe:this.l&Qg.Sc&&(this.a&=X.Xa|X.ra|X.va);this.l=c.status|this.g&Z.Rb|(d&&512==d.N?Qg.Id:0);break;case Pg.Sb:(this.f&Z.Hd)==Z.ce&&(b=this.f&Z.vb,c=(this.f&Z.ee)<<2,this.g=this.f&Z.de?this.g+b:this.g-b,this.f=this.g=this.g&Z.vb|c);break;case Pg.Qd:this.l=this.g;break;case Pg.Od:b=this.Gb;case Pg.je:b||(b=this.gc),
e=this.f>>Z.S.vb,f=this.f&Z.Rb?1:0,g=this.f&Z.ed,!d||e>=d.N||g>=d.P?this.a=this.a|Y.ya|X.tb:(a=65536-this.l&65535,d=(this.i&Og.vc)<<16|this.o,a=b.call(this,c,e,f,g,a,d,2,!1,this.Wd.bind(this)))}a&&(this.a=this.a|X.Xa|X.wa,this.a&X.tc&&oc(this.c,this.jb))}};h.mf=function(){return this.o};h.wg=function(a){this.o=a&Rg.Ta};h.qf=function(){return this.f};h.zg=function(a){this.f=a};h.rf=function(){return this.l};h.Ag=function(a){this.l=a};h.nf=function(){return this.i};
h.xg=function(a){this.i=a&Og.vc;this.a=this.a&~X.va|(this.i&3)<<X.S.va};var X=D.Zd,Rg=D.Xd,Z=D.$d,Qg=D.Qb,Og=D.Yd,Y=D.Qc,Pg=D.ra,Sg={},Ng=(Sg[63744]=[null,null,L.prototype.pf,L.prototype.yg,"RLCS"],Sg[63746]=[null,null,L.prototype.mf,L.prototype.wg,"RLBA"],Sg[63748]=[null,null,L.prototype.qf,L.prototype.zg,"RLDA"],Sg[63750]=[null,null,L.prototype.rf,L.prototype.Ag,"RLMP"],Sg[63752]=[null,null,L.prototype.nf,L.prototype.xg,"RLBE"],Sg);
function Tg(a,b,c){q.call(this,"Computer",a,33554432);this.j.O=!1;this.D=null;Ug(this,b);this.w=Tc(this,"autoPower",a,6);this.g=0;this.J=+a.busWidth||+a.buswidth;this.s=this.o=this.v=null;this.l=this.I=!1;this.i=this.h=null;this.H=this.B=this.C=!1;this.K=Tc(this,"url")||"";(Math.random()+.1).toString(36);this.b=Vg(this);if(this.c=za("CPU",this.id)){this.F=za("Debugger",this.id);this.u=new Sb({id:this.Na+".bus",busWidth:this.J},this.c,this.F);var d,e=xa(this.id);if((this.f=za("Panel",this.id))&&this.f.gb)for(b=
0;b<e.length;b++)d=e[b],d.G=this.f.G,d.Z=this.f.Z,d.gb=this.f.gb;this.Z(hb+" v1.32.2\nCopyright \u00a9 2012-2017 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");this.Z("Portions adapted from the PDP-11/70 Emulator by Paul Nankervis <http://skn.noip.me/pdp11/pdp11.html>");for(b=0;b<e.length;b++)d=e[b],d.ha&&d.ha(this,this.u,this.c,this.F);this.a=Tc(this,"resume",a,4,Wg);var f;b=null;if(a=Tc(this,"state")||(f=!0,a.state))this.v=b=a,f||(this.l=!0,this.a=
Wg),this.a&&(this.i=new E(this,"1.32.2"),Xg(this.i)?b=null:delete this.i);!b&&this.a&&(b=Yg(this))&&(this.l=!0);if(b){var g=this;Oa(b,null,!0,function(a,b,c){c?(g.o=null,g.l=!1,g.G("Unable to load machine state from server (error "+c+(b?": "+Ka(b):"")+")")):(g.s=b,g.I=!0);B(g)})}else B(this);this.m.power||(this.w=!0);!c&&this.w&&Zg(this,this.Fb)}else u("Unable to find CPU component")}n(Tg,q);
function Ug(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){u(d.message+" ("+c+")")}}a.D=b}function Tc(a,b,c,d,e){var f=b.toLowerCase(),f=Wa(b)||Wa(f);void 0===f&&a.D&&(f=a.D[b]);void 0===f&&c&&(f=c[b]);void 0===f&&"object"==typeof resources&&resources[b]&&(f=b);void 0===f&&(f=e);if("string"==typeof f&&d)switch(d){case 4:f=+f;isNaN(f)&&(f=e||0);break;case 6:f="true"==f}return f}
function Tg(a,b,c){q.call(this,"Computer",a,33554432);this.j.O=!1;this.D=null;Ug(this,b);this.w=Tc(this,"autoPower",a,6);this.g=0;this.J=+a.busWidth||+a.buswidth;this.s=this.i=this.v=null;this.o=this.I=!1;this.l=this.h=null;this.H=this.B=this.C=!1;this.K=Tc(this,"url")||"";(Math.random()+.1).toString(36);this.b=Vg(this);if(this.c=za("CPU",this.id)){this.F=za("Debugger",this.id);this.u=new Sb({id:this.Na+".bus",busWidth:this.J},this.c,this.F);var d,e=xa(this.id);if((this.f=za("Panel",this.id))&&this.f.gb)for(b=
0;b<e.length;b++)d=e[b],d.G=this.f.G,d.Z=this.f.Z,d.gb=this.f.gb;this.Z(hb+" v1.32.2\nCopyright \u00a9 2012-2017 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");this.Z("Portions adapted from the PDP-11/70 Emulator by Paul Nankervis <http://skn.noip.me/pdp11/pdp11.html>");for(b=0;b<e.length;b++)d=e[b],d.ha&&d.ha(this,this.u,this.c,this.F);b=null;d=Tc(this,"resume",a);void 0!==d&&(1<d.length?b=this.i=d:this.a=parseInt(d,10));var f;if(a=Tc(this,"state")||
(f=!0,a.state))this.v=b=a,f||(this.o=!0,this.a=Wg),this.a&&(this.l=new E(this,"1.32.2"),Xg(this.l)?b=null:delete this.l);!b&&this.a&&(b=Yg(this))&&(this.o=!0);if(b){var g=this;Oa(b,null,!0,function(a,b,c){c?(g.i=null,g.o=!1,g.G("Unable to load machine state from server (error "+c+(b?": "+Ka(b):"")+")")):(g.s=b,g.I=!0);B(g)})}else B(this);this.m.power||(this.w=!0);!c&&this.w&&Zg(this,this.Fb)}else u("Unable to find CPU component")}n(Tg,q);
function Ug(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){u(d.message+" ("+c+")")}}a.D=b}function Tc(a,b,c,d){var e=b.toLowerCase(),e=Wa(b)||Wa(e);void 0===e&&a.D&&(e=a.D[b]);void 0===e&&c&&(e=c[b]);void 0===e&&"object"==typeof resources&&resources[b]&&(e=b);void 0===e&&(e=void 0);if("string"==typeof e&&d)switch(d){case 4:e=+e;isNaN(e)&&(e=0);break;case 6:e="true"==e}return e}
function Zg(a,b,c){for(var d=xa(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!Aa(f)){Aa(f,function(){Zg(a,b,c)});return}}b.call(a,c)}function $g(a,b){var c=new E(a,"1.32.2",ah);if(Xg(c)&&bh(c)){var d=c.get(ch),e=b?b.get(ch):"unknown";d!=e&&(a.G("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}h=Tg.prototype;
h.Fb=function(a){void 0===a&&(a=this.a||(this.s?dh:Wg));if(!this.g){this.g++;var b=!1,c=!1;this.C=!1;var d=this.i||new E(this,"1.32.2");if(a==eh)b=!0;else if(a>Wg){if(Xg(d,this.s)){this.h=new E(this,"1.32.2",fh);Xg(this.h)&&(ih(this,d),a=jh,kh(this.h));this.h.set(ch,Na());lh(this.h);var e=this.a&&!this.l;if(a==dh||wa("Click OK to restore the previous "+hb+" machine state, or CANCEL to reset the machine.")){if(c=bh(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?Xg(d,g):("error"==f&&"no machine state"!=
g?(this.G("Error: "+g),"unable to verify user"==g&&(Ua(mh,""),this.b=null)):this.Z(f+": "+g),kh(d),Xg(d)?(c=bh(d),e=!0):c=!1))}e&&$g(this,c?d:null)}else a==jh&&d.clear()}else $g(this);delete this.s;delete this.i}e=xa(this.id);for(f=0;f<e.length;f++)g=e[f],g!==this&&g!=this.c&&(c=nh(this,g,d,b,c));b=[d,a,c];a!=eh?Zg(this,this.md,b):this.md(b)}};
h.Fb=function(a){void 0===a&&(a=this.a||(this.s?dh:Wg));if(!this.g){this.g++;var b=!1,c=!1;this.C=!1;var d=this.l||new E(this,"1.32.2");if(a==eh)b=!0;else if(a>Wg){if(Xg(d,this.s)){this.h=new E(this,"1.32.2",fh);Xg(this.h)&&(ih(this,d),a=jh,kh(this.h));this.h.set(ch,Na());lh(this.h);var e=this.a&&!this.o;if(a==dh||wa("Click OK to restore the previous "+hb+" machine state, or CANCEL to reset the machine.")){if(c=bh(d)){var f=d.get("code"),g=d.get("data");f&&("ok"==f?Xg(d,g):("error"==f&&"no machine state"!=
g?(this.G("Error: "+g),"unable to verify user"==g&&(Ua(mh,""),this.b=null)):this.Z(f+": "+g),kh(d),Xg(d)?(c=bh(d),e=!0):c=!1))}e&&$g(this,c?d:null)}else a==jh&&d.clear()}else $g(this);delete this.s;delete this.l}e=xa(this.id);for(f=0;f<e.length;f++)g=e[f],g!==this&&g!=this.c&&(c=nh(this,g,d,b,c));b=[d,a,c];a!=eh?Zg(this,this.md,b):this.md(b)}};
function nh(a,b,c,d,e){if(!b.j.O){b.j.O=!0;var f=null;try{if(e&&((f=c.get(b.id))||(f=c.get(b.id.replace(/[a-z0-9]\./i,".")))),"string"===typeof f&&(f=null),!b.ja(f,d)&&f&&(u("Unable to restore state for "+b.type),a.v&&!a.I?(c.clear(),a.a=Wg,window&&window.location.reload()):a.C=!0,b.ja(null),e=!1),!d&&b.Zc){var g=b.Zc.split("|");for(a=0;a<g.length;a++)b.status(g[a])}}catch(k){u("Error restoring state for "+b.type+" ("+k.message+")")}}return e}
h.md=function(a){var b=a[0],c=0>a[1];a=a[2];this.H=!0;this.j.O=!0;var d=this.m.power;d&&(d.textContent="Shutdown");this.c&&(nh(this,this.c,b,c,a),Kb(this,-2),this.c.Y());this.C&&(ih(this,b),b.clear());!c&&this.h&&(this.h.clear(),delete this.h);this.g=0};
function ih(a,b){if(wa("There may be a problem with your "+hb+" machine.\n\nTo help us diagnose it, click OK to send this "+hb+" machine state to http://www.pcjs.org.")){var c=a.K;a=a.b||"";b=b.toString();var d={};d.app=hb;d.ver="1.32.2";d.url=c;d.user=a;d.type="bug";d.data=b;Oa("http://www.pcjs.org/api/v1/report",d,!0)}}
@ -265,12 +265,12 @@ function oh(a,b,c){var d,e="none";if(a.g)return null;a.g--;var f=new E(a,"1.32.2
h.start=function(a,b){for(var c=xa(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}Kb(this,-1)};h.stop=function(a,b){for(var c=xa(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}Kb(this,-1)};
function Kb(a,b){if(a.c){var c=a.c,d=b||0,e=c.m.speed;e&&(0>=d||30<=(c.Lc+=d))&&(e.textContent=c.j.L?c.Oa.toFixed(2)+"Mhz":"Stopped",c.Lc=0)}if(a.f&&(a=a.f,b=b||0,a.l)){c=a.c.j.L;d=!!(a.c.g&8);if(0>=b||60<=(a.i+=b)){for(e=0;e<a.c.b.length;e++)Ab(a,"R"+e,a.c.b[e]);e=zc(a.c);Ab(a,"PS",e);Ab(a,"NF",e&8?1:0,1);Ab(a,"ZF",e&4?1:0,1);Ab(a,"VF",e&2?1:0,1);Ab(a,"CF",e&1?1:0,1);a.i=0}-1>b?a.U=a.c.b[7]:0<b&&c&&!d&&(a.U=a.c.Ea);wb(a,a.U);nb(a,a.f);b=a.c;b=b.bb?b.qa&16?1:2:4;Pb(a,"B22",b&1);Pb(a,"B18",b&2);Pb(a,
"B16",b&4)}}
h.ka=function(a,b,c){var d=this;switch(b){case "power":return this.m[b]=c,c.onclick=function(){d.g||(d.j.O?oh(d,!1,!0):Zg(d,d.Fb))},!0;case "reset":return this.m[b]=c,c.onclick=function(){if(d.j.O&&!d.g)if(d.a&&!d.o){var a=wa("Click OK to save changes to this "+hb+" machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");oh(d,a,!0);!a&&d.v?window&&window.location.reload():(a||(d.B=!0),d.Fb(Wg),d.B=!1)}else d.reset(),d.c&&d.c.Y()},!0;case "save":if(Ha(Qa(),"pcjs.org"))c.parentNode.removeChild(c);else return this.m[b]=
c,c.onclick=function(){var a=Vg(d,!0);if(a){var b=!!(d.a&&!d.o||d.v),c=oh(d,b);b?sh(d,a,c):d.G("Resume disabled, machine state not saved")}},!0}return!1};function Vg(a,b){var c=a.b;c||((c=Ta(mh),void 0!==c)?!c&&b&&(b=null,window&&(b=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c=b)&&((c=uh(a,c))||a.G("The user ID is invalid.")):b&&a.G("Browser local storage is not available"));return c}
h.ka=function(a,b,c){var d=this;switch(b){case "power":return this.m[b]=c,c.onclick=function(){d.g||(d.j.O?oh(d,!1,!0):Zg(d,d.Fb))},!0;case "reset":return this.m[b]=c,c.onclick=function(){if(d.j.O&&!d.g)if(d.a&&!d.i){var a=wa("Click OK to save changes to this "+hb+" machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");oh(d,a,!0);!a&&d.v?window&&window.location.reload():(a||(d.B=!0),d.Fb(Wg),d.B=!1)}else d.reset(),d.c&&d.c.Y()},!0;case "save":if(Ha(Qa(),"pcjs.org"))c.parentNode.removeChild(c);else return this.m[b]=
c,c.onclick=function(){var a=Vg(d,!0);if(a){var b=!!(d.a&&!d.i||d.v),c=oh(d,b);b?sh(d,a,c):d.G("Resume disabled, machine state not saved")}},!0}return!1};function Vg(a,b){var c=a.b;c||((c=Ta(mh),void 0!==c)?!c&&b&&(b=null,window&&(b=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c=b)&&((c=uh(a,c))||a.G("The user ID is invalid.")):b&&a.G("Browser local storage is not available"));return c}
function uh(a,b){a.b=null;b=Oa(Qa()+"/api/v1/user?req=verify&user="+b);var c=b[1];if(!b[0]&&c)try{b=eval("("+c+")"),b.code&&"ok"==b.code&&(Ua(mh,b.data),a.b=b.data)}catch(d){u(d.message+" ("+c+")")}return a.b}function Yg(a){var b=null;a.b&&(b=Qa()+"/api/v1/user?req=load&user="+a.b+"&state="+vh(a,"1.32.2"));return b}
function sh(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=vh(a,"1.32.2");d.data=c;b=Oa(Qa()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.G("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.G(c),Ua(mh,""),a.b=null)}}
function Vf(a){var b;a=xa(a.id);for(var c=0;c<a.length;c++){var d=a[c];if(b)b==d&&(b=null);else if("RAM"==d.type)return d}return null}function $c(a){if(a.gb){var b=0,c=0;window&&(b=window.scrollX,c=window.scrollY);a.gb.focus();window&&window.scrollTo(b,c)}}var fh="failsafe",ah="validate",ch="timestamp",ph="version",qh="url",rh="browser",mh="user",eh=-1,Wg=0,dh=1,jh=2,th=3;
Za(function(){for(var a=A(document,x+"-machine"),b=0;b<a.length;b++)for(var c=a[b],d=v(c),c=A(c,x,"computer"),e=0;e<c.length;e++){var f=c[e],g=v(f),g=new Tg(g,d,!0);w(g,f);g.w&&Zg(g,g.Fb)}});$a.show.push(function(){for(var a=A(document,x,"computer"),b=0;b<a.length;b++){var c=v(a[b]);(c=za("Computer",c.id))&&c.H&&!c.j.O&&c.Fb(eh)}});$a.exit.push(function(){for(var a=A(document,x,"computer"),b=0;b<a.length;b++){var c=v(a[b]);(c=za("Computer",c.id))&&c.j.O&&oh(c,!(!c.a||c.o),!0)}});
Za(function(){for(var a=A(document,x+"-machine"),b=0;b<a.length;b++)for(var c=a[b],d=v(c),c=A(c,x,"computer"),e=0;e<c.length;e++){var f=c[e],g=v(f),g=new Tg(g,d,!0);w(g,f);g.w&&Zg(g,g.Fb)}});$a.show.push(function(){for(var a=A(document,x,"computer"),b=0;b<a.length;b++){var c=v(a[b]);(c=za("Computer",c.id))&&c.H&&!c.j.O&&c.Fb(eh)}});$a.exit.push(function(){for(var a=A(document,x,"computer"),b=0;b<a.length;b++){var c=v(a[b]);(c=za("Computer",c.id))&&c.j.O&&oh(c,!(!c.a||c.i),!0)}});
function E(a,b,c){this.id=a.id;this.a="";this.c={};this.b=this.m=!1;this.key=vh(a,b,c);kh(this,a.he)}h=E.prototype;h.set=function(a,b){try{this.c[a]=b}catch(c){}};h.get=function(a){return this.c[a]||null};h.data=function(){return this.c};function Xg(a,b){return b?(a.a=b,a.b=!0,a.m=!1,!0):a.b?!0:Ra()&&(b=Ta(a.key))?(a.a=b,a.b=!0):!1}function bh(a){var b=!0;if(!a.m)try{a.c=JSON.parse(a.a),a.m=!0}catch(c){u(c.message||c),b=!1}return b}
function lh(a){var b=!0;if(Ra()){var c=JSON.stringify(a.c);Ua(a.key,c)||(u("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}h.toString=function(){return this.c?JSON.stringify(this.c):this.a};function kh(a,b){a.a="";a.c={};a.b=a.m=!1;b&&a.set("parms",b)}
h.clear=function(a){kh(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(e){}b.splice(c,1);c=0}};function vh(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}var wh=0;