checkCPMVector() actually checks CPM_VECTORS now

This commit is contained in:
Jeff Parsons 2016-04-27 08:34:13 -07:00
commit 87d4c75712
5 changed files with 120 additions and 111 deletions

View file

@ -50,7 +50,7 @@ m.save=function(){var a=new I(this);K(a,0,[this.j,this.L,this.P,this.M,this.R,th
m.restore=function(a){var b=a[0];this.j=b[0];this.L=b[1];this.P=b[2];this.M=b[3];this.R=b[4];this.N=b[5];this.S=b[6];this.ba=b[7]&65535;H(this,b[8]);Ac(this,b[9]);b=a[1];this.A=b[0];this.J=b[1];sc(this,b[3]);a:{b=this.D;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.aa){for(var f=0,h=Array(b.aa),g=0;g<e.length-1;)for(var k=e[g++],l=e[g++];k--;)h[f++]=l;e=h}f=b.D[d];if(!f||!f.restore(e)){t("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
m.pa=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "SF":case "ZF":case "AF":case "PF":case "CF":this.T[b]=c;this.ja++;d=!0;break;default:d=this.parent.pa.call(this,a,b,c)}return d};function Dc(a){return a.L<<8|a.P}function Ec(a,b){a.L=b>>8&255;a.P=b&255}function Fc(a){return a.M<<8|a.R}function Gc(a,b){a.M=b>>8&255;a.R=b&255}function L(a){return a.N<<8|a.S}
function M(a,b){a.N=b>>8&255;a.S=b&255}function H(a,b){a.O=b&65535}function Hc(a){return a.G&256?1:0}function Ic(a){return nb[a.X&255]?4:0}function Jc(a){return(a.X^a.fa)&16?16:0}function Kc(a){return a.G&255?0:64}function Lc(a){return a.X&128?128:0}function Cc(a){return a.oa&-214|Lc(a)|Kc(a)|Jc(a)|Ic(a)|Hc(a)}function Ac(a,b){a.G=a.X=a.fa=0;b&1&&(a.G|=256);b&4||(a.X|=1);b&16&&(a.fa|=16);b&64||(a.G|=255);b&128&&(a.X^=192);a.oa=a.oa&-513|b&512|2}
function Mc(a,b){a.fa=a.j^b;return(a.G=a.X=a.j+b)&255}function Nc(a,b){a.fa=a.j^b;return(a.G=a.X=a.j+b+(a.G&256?1:0))&255}function gd(a,b){return a.G=a.X=a.fa=a.j&b}function hd(a,b){a.fa=a.j^b;a.G=a.X=a.j-b}function id(a,b){a.fa=b;b=(a.X=b-1)&255;a.G=a.G&-256|b;return b}function jd(a,b){a.fa=b;b=(a.X=b+1)&255;a.G=a.G&-256|b;return b}function kd(a,b){return a.G=a.X=a.fa=a.j|b}function ld(a,b){a.fa=a.j^b;return(a.G=a.X=a.j-b)&255}function md(a,b){a.fa=a.j^b;return(a.G=a.X=a.j-b-(a.G&256?1:0))&255}
function Mc(a,b){a.fa=a.j^b;return(a.G=a.X=a.j+b)&255}function Nc(a,b){a.fa=a.j^b;return(a.G=a.X=a.j+b+(a.G&256?1:0))&255}function Oc(a,b){return a.G=a.X=a.fa=a.j&b}function hd(a,b){a.fa=a.j^b;a.G=a.X=a.j-b}function id(a,b){a.fa=b;b=(a.X=b-1)&255;a.G=a.G&-256|b;return b}function jd(a,b){a.fa=b;b=(a.X=b+1)&255;a.G=a.G&-256|b;return b}function kd(a,b){return a.G=a.X=a.fa=a.j|b}function ld(a,b){a.fa=a.j^b;return(a.G=a.X=a.j-b)&255}function md(a,b){a.fa=a.j^b;return(a.G=a.X=a.j-b-(a.G&256?1:0))&255}
function nd(a,b){return a.G=a.X=a.fa=a.j^b}m.V=function(a){return this.la[(a&this.K)>>>this.Z].Ka(a&this.H,a)};function od(a,b){var c=b&a.H,d=(b&a.K)>>>a.Z;if(c<a.H)return a.la[d].Rb(c,b);c=a.la[d].Ka(c,b);return c|=a.la[d+1&a.Y].Ka(0,b+1)<<8}function N(a,b,c){a.la[(b&a.K)>>>a.Z].Za(b&a.H,c&255,b)}function pd(a,b,c){var d=b&a.H,e=(b&a.K)>>>a.Z;d<a.H?a.la[e].Tb(d,c&65535,b):(a.la[e++].Za(d,c&255,b),a.la[e&a.Y].Za(0,c>>8&255,b+1))}function O(a){var b=a.V(a.O);H(a,a.O+1);return b}
function P(a){var b=od(a,a.O);H(a,a.O+2);return b}function R(a){var b=od(a,a.ba);a.ba=a.ba+2&65535;return b}function S(a,b){a.ba=a.ba-2&65535;pd(a,a.ba,b)}function T(a,b,c,d){d=d||2;a.T[b]&&(void 0===c&&(lb(a,"Value for "+b+" is invalid"),a.da()),c=!a.w.ia||a.w.Jb?q(c,d):"--------".substr(0,d),a.T[b].textContent!=c&&(a.T[b].textContent=c))}
m.qa=function(a){this.ja&&(a||!this.w.ia||this.w.Jb)&&(T(this,"A",this.j),T(this,"B",this.L),T(this,"C",this.P),T(this,"BC",Dc(this),4),T(this,"D",this.M),T(this,"E",this.R),T(this,"DE",Fc(this),4),T(this,"H",this.N),T(this,"L",this.S),T(this,"HL",L(this),4),T(this,"SP",this.ba,4),T(this,"PC",this.O,4),a=Cc(this),T(this,"PS",a,4),T(this,"SF",a&128,1),T(this,"ZF",a&64,1),T(this,"AF",a&16,1),T(this,"PF",a&4,1),T(this,"CF",a&1,1));if(a=this.T.speed)a.textContent=this.w.ia&&this.i.Ga?this.i.Ga.toFixed(2)+
@ -69,14 +69,14 @@ this.R;this.b-=5},function(){this.S=this.N;this.b-=5},function(){this.b-=5},func
this.A|=16;this.b-=7;this.C&&hb(this,-2147483648)?(H(this,a),this.C.da()):this.oa&512||(this.C&&H(this,a),this.da())},function(){N(this,L(this),this.j);this.b-=7},function(){this.j=this.L;this.b-=5},function(){this.j=this.P;this.b-=5},function(){this.j=this.M;this.b-=5},function(){this.j=this.R;this.b-=5},function(){this.j=this.N;this.b-=5},function(){this.j=this.S;this.b-=5},function(){this.j=this.V(L(this));this.b-=7},function(){this.b-=5},function(){this.j=Mc(this,this.L);this.b-=4},function(){this.j=
Mc(this,this.P);this.b-=4},function(){this.j=Mc(this,this.M);this.b-=4},function(){this.j=Mc(this,this.R);this.b-=4},function(){this.j=Mc(this,this.N);this.b-=4},function(){this.j=Mc(this,this.S);this.b-=4},function(){this.j=Mc(this,this.V(L(this)));this.b-=7},function(){this.j=Mc(this,this.j);this.b-=4},function(){this.j=Nc(this,this.L);this.b-=4},function(){this.j=Nc(this,this.P);this.b-=4},function(){this.j=Nc(this,this.M);this.b-=4},function(){this.j=Nc(this,this.R);this.b-=4},function(){this.j=
Nc(this,this.N);this.b-=4},function(){this.j=Nc(this,this.S);this.b-=4},function(){this.j=Nc(this,this.V(L(this)));this.b-=7},function(){this.j=Nc(this,this.j);this.b-=4},function(){this.j=ld(this,this.L);this.b-=4},function(){this.j=ld(this,this.P);this.b-=4},function(){this.j=ld(this,this.M);this.b-=4},function(){this.j=ld(this,this.R);this.b-=4},function(){this.j=ld(this,this.N);this.b-=4},function(){this.j=ld(this,this.S);this.b-=4},function(){this.j=ld(this,this.V(L(this)));this.b-=7},function(){this.j=
ld(this,this.j);this.b-=4},function(){this.j=md(this,this.L);this.b-=4},function(){this.j=md(this,this.P);this.b-=4},function(){this.j=md(this,this.M);this.b-=4},function(){this.j=md(this,this.R);this.b-=4},function(){this.j=md(this,this.N);this.b-=4},function(){this.j=md(this,this.S);this.b-=4},function(){this.j=md(this,this.V(L(this)));this.b-=7},function(){this.j=md(this,this.j);this.b-=4},function(){this.j=gd(this,this.L);this.b-=4},function(){this.j=gd(this,this.P);this.b-=4},function(){this.j=
gd(this,this.M);this.b-=4},function(){this.j=gd(this,this.R);this.b-=4},function(){this.j=gd(this,this.N);this.b-=4},function(){this.j=gd(this,this.S);this.b-=4},function(){this.j=gd(this,this.V(L(this)));this.b-=7},function(){this.j=gd(this,this.j);this.b-=4},function(){this.j=nd(this,this.L);this.b-=4},function(){this.j=nd(this,this.P);this.b-=4},function(){this.j=nd(this,this.M);this.b-=4},function(){this.j=nd(this,this.R);this.b-=4},function(){this.j=nd(this,this.N);this.b-=4},function(){this.j=
ld(this,this.j);this.b-=4},function(){this.j=md(this,this.L);this.b-=4},function(){this.j=md(this,this.P);this.b-=4},function(){this.j=md(this,this.M);this.b-=4},function(){this.j=md(this,this.R);this.b-=4},function(){this.j=md(this,this.N);this.b-=4},function(){this.j=md(this,this.S);this.b-=4},function(){this.j=md(this,this.V(L(this)));this.b-=7},function(){this.j=md(this,this.j);this.b-=4},function(){this.j=Oc(this,this.L);this.b-=4},function(){this.j=Oc(this,this.P);this.b-=4},function(){this.j=
Oc(this,this.M);this.b-=4},function(){this.j=Oc(this,this.R);this.b-=4},function(){this.j=Oc(this,this.N);this.b-=4},function(){this.j=Oc(this,this.S);this.b-=4},function(){this.j=Oc(this,this.V(L(this)));this.b-=7},function(){this.j=Oc(this,this.j);this.b-=4},function(){this.j=nd(this,this.L);this.b-=4},function(){this.j=nd(this,this.P);this.b-=4},function(){this.j=nd(this,this.M);this.b-=4},function(){this.j=nd(this,this.R);this.b-=4},function(){this.j=nd(this,this.N);this.b-=4},function(){this.j=
nd(this,this.S);this.b-=4},function(){this.j=nd(this,this.V(L(this)));this.b-=7},function(){this.j=nd(this,this.j);this.b-=4},function(){this.j=kd(this,this.L);this.b-=4},function(){this.j=kd(this,this.P);this.b-=4},function(){this.j=kd(this,this.M);this.b-=4},function(){this.j=kd(this,this.R);this.b-=4},function(){this.j=kd(this,this.N);this.b-=4},function(){this.j=kd(this,this.S);this.b-=4},function(){this.j=kd(this,this.V(L(this)));this.b-=7},function(){this.j=kd(this,this.j);this.b-=4},function(){hd(this,
this.L);this.b-=4},function(){hd(this,this.P);this.b-=4},function(){hd(this,this.M);this.b-=4},function(){hd(this,this.R);this.b-=4},function(){hd(this,this.N);this.b-=4},function(){hd(this,this.S);this.b-=4},function(){hd(this,this.V(L(this)));this.b-=7},function(){hd(this,this.j);this.b-=4},function(){Kc(this)||(H(this,R(this)),this.b-=6);this.b-=5},function(){Ec(this,R(this));this.b-=10},function(){var a=P(this);Kc(this)||H(this,a);this.b-=10},td,function(){var a=P(this);Kc(this)||(S(this,this.O),
H(this,a),this.b-=6);this.b-=11},function(){S(this,Dc(this));this.b-=11},function(){this.j=Mc(this,O(this));this.b-=7},function(){S(this,this.O);H(this,0);this.b-=11},function(){Kc(this)&&(H(this,R(this)),this.b-=6);this.b-=5},ud,function(){var a=P(this);Kc(this)&&H(this,a);this.b-=10},td,function(){var a=P(this);Kc(this)&&(S(this,this.O),H(this,a),this.b-=6);this.b-=11},vd,function(){this.j=Nc(this,O(this));this.b-=7},function(){S(this,this.O);H(this,8);this.b-=11},function(){Hc(this)||(H(this,R(this)),
this.b-=6);this.b-=5},function(){Gc(this,R(this));this.b-=10},function(){var a=P(this);Hc(this)||H(this,a);this.b-=10},function(){var a=O(this);Ib(this.D,a,this.j);this.b-=10},function(){var a=P(this);Hc(this)||(S(this,this.O),H(this,a),this.b-=6);this.b-=11},function(){S(this,Fc(this));this.b-=11},function(){this.j=ld(this,O(this));this.b-=7},function(){S(this,this.O);H(this,16);this.b-=11},function(){Hc(this)&&(H(this,R(this)),this.b-=6);this.b-=5},ud,function(){var a=P(this);Hc(this)&&H(this,a);
this.b-=10},function(){var a=O(this);this.j=Fb(this.D,a)&255;this.b-=10},function(){var a=P(this);Hc(this)&&(S(this,this.O),H(this,a),this.b-=6);this.b-=11},vd,function(){this.j=md(this,O(this));this.b-=7},function(){S(this,this.O);H(this,24);this.b-=11},function(){Ic(this)||(H(this,R(this)),this.b-=6);this.b-=5},function(){M(this,R(this));this.b-=10},function(){var a=P(this);Ic(this)||H(this,a);this.b-=10},function(){var a=R(this);S(this,L(this));M(this,a);this.b-=18},function(){var a=P(this);Ic(this)||
(S(this,this.O),H(this,a),this.b-=6);this.b-=11},function(){S(this,L(this));this.b-=11},function(){this.j=gd(this,O(this));this.b-=7},function(){S(this,this.O);H(this,32);this.b-=11},function(){Ic(this)&&(H(this,R(this)),this.b-=6);this.b-=5},function(){H(this,L(this));this.b-=5},function(){var a=P(this);Ic(this)&&H(this,a);this.b-=10},function(){var a=L(this);M(this,Fc(this));Gc(this,a);this.b-=5},function(){var a=P(this);Ic(this)&&(S(this,this.O),H(this,a),this.b-=6);this.b-=11},vd,function(){this.j=
(S(this,this.O),H(this,a),this.b-=6);this.b-=11},function(){S(this,L(this));this.b-=11},function(){this.j=Oc(this,O(this));this.b-=7},function(){S(this,this.O);H(this,32);this.b-=11},function(){Ic(this)&&(H(this,R(this)),this.b-=6);this.b-=5},function(){H(this,L(this));this.b-=5},function(){var a=P(this);Ic(this)&&H(this,a);this.b-=10},function(){var a=L(this);M(this,Fc(this));Gc(this,a);this.b-=5},function(){var a=P(this);Ic(this)&&(S(this,this.O),H(this,a),this.b-=6);this.b-=11},vd,function(){this.j=
nd(this,O(this));this.b-=7},function(){S(this,this.O);H(this,40);this.b-=11},function(){Lc(this)||(H(this,R(this)),this.b-=6);this.b-=5},function(){var a=R(this);Ac(this,a);this.j=a>>8;this.b-=10},function(){var a=P(this);Lc(this)||H(this,a);this.b-=10},function(){this.oa&=-513;this.b-=4},function(){var a=P(this);Lc(this)||(S(this,this.O),H(this,a),this.b-=6);this.b-=11},function(){S(this,Cc(this)&255|this.j<<8);this.b-=11},function(){this.j=kd(this,O(this));this.b-=7},function(){S(this,this.O);H(this,
48);this.b-=11},function(){Lc(this)&&(H(this,R(this)),this.b-=6);this.b-=5},function(){this.ba=L(this)&65535;this.b-=5},function(){var a=P(this);Lc(this)&&H(this,a);this.b-=10},function(){this.oa|=512;this.b-=4},function(){var a=P(this);Lc(this)&&(S(this,this.O),H(this,a),this.b-=6);this.b-=11},vd,function(){hd(this,O(this));this.b-=7},function(){S(this,this.O);H(this,56);this.b-=11}];
function V(a){u.call(this,"ChipSet",a,V,32768);var b=a.model;b&&!wd[b]&&t("Unrecognized ChipSet model: "+b);this.Ra=wd[b];a.sound&&(this.W=null,window&&(this.W=window.AudioContext||window.webkitAudioContext),this.W&&new this.W);B(this)}x(V);var wd={SI1978:1978.1};m=V.prototype;m.pa=function(){return!1};
@ -89,7 +89,7 @@ zd.prototype.wa=function(){if(this.xa){if(this.C){var a=this.C,b=this.id,c=this.
function Ad(a,b,c,d){if(d)a.na("Unable to load system ROM (error "+d+": "+b+")");else{Xa(a.Hb,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.u=f;else if(h)for(a.u=Array(4*h.length),d=c=0;c<h.length;c++)a.u[d++]=h[c]&255,a.u[d++]=h[c]>>8&255,a.u[d++]=h[c]>>16&255,a.u[d++]=h[c]>>24&255;else a.u=e;a.xa=e.symbols;if(!a.u.length){t("Empty ROM: "+b);return}if(1==a.u.length){t(a.u[0]);return}}catch(g){a.na("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
" ").replace(/ +$/,"").split(" "),a.u=Array(b.length),e=0;e<b.length;e++)a.u[e]=aa(b[e],16);Cd(a)}}
function Cd(a){if(!kb(a))if(!a.H)B(a);else if(a.u&&a.D){a.A||(a.A=a.u.length);if(a.u.length!=a.A)lb(a,"ROM size (0x"+q(a.u.length)+") does not match specified size ("+("0x"+q(a.A))+")");else if(Dd(a,a.I)){var b=[];"number"==typeof a.F?b.push(a.F):null!=a.F&&a.F.length&&(b=a.F);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.D,h=d.A,g=[],k=d.I>>>f.Z;0<h&&k<f.D.length;)g.push(f.D[k++]),h-=f.ma;f=d.D;d=d.A;h=0;for(e>>>=f.Z;0<d&&e<f.D.length;){k=g[h++];if(!k)break;f.D[e++]=k;d-=f.ma}}delete a.u}B(a)}}
function Dd(a,b){if(tb(a.D,b,a.A,a.J?1:Pb)){var c;for(c=0;c<a.u.length;c++)wb(a.D,b+c,a.u[c]);if(a.J&&256==b){for(c=0;c<Bd.length;c++)wb(a.D,Bd[c],118);zc(a.b,function(a){return function(b){a.C&&(a.g("CP/M vector "+r(b)),H(a.b,b),a.C.da())}}(a));Bc(a.b,b)}return!0}return!1}Ia(function(){for(var a=A(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new zd(d);eb(d,c)}});function Ed(a){u.call(this,"RAM",a,Ed);this.F=a.addr;this.A=a.size;this.u=!1}x(Ed);m=Ed.prototype;
function Dd(a,b){if(tb(a.D,b,a.A,a.J?1:Pb)){var c;for(c=0;c<a.u.length;c++)wb(a.D,b+c,a.u[c]);if(a.J&&256==b){for(c=0;c<Bd.length;c++)wb(a.D,Bd[c],118);zc(a.b,function(a){return function(b){0<=Bd.indexOf(b)&&a.C&&(a.g("CP/M vector "+r(b)),H(a.b,b),a.C.da())}}(a));Bc(a.b,b)}return!0}return!1}Ia(function(){for(var a=A(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new zd(d);eb(d,c)}});function Ed(a){u.call(this,"RAM",a,Ed);this.F=a.addr;this.A=a.size;this.u=!1}x(Ed);m=Ed.prototype;
m.Aa=function(a,b,c,d){this.D=b;this.b=c;this.C=d;B(this)};m.wa=function(a,b){b||this.reset();return!0};m.va=function(a){return a?this.save():!0};m.reset=function(){!this.u&&this.A&&tb(this.D,this.F,this.A,1)&&(this.u=!0,this.status(Math.floor(this.A/1024)+"Kb allocated"));this.u||t("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};Ia(function(){for(var a=A(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Ed(d);eb(d,c)}});
function Fd(a){u.call(this,"Keyboard",a,Fd,65536);B(this)}x(Fd);Ia(function(){for(var a=A(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Fd(d);eb(d,c)}});function Gd(a){u.call(this,"Video",a,Gd,262144);this.Zb=a.interruptRate;this.ya=a.refreshRate||60;B(this)}x(Gd);Gd.prototype.Aa=function(a,b,c,d){this.u=a;this.D=b;this.b=c;this.C=d};
Ia(function(){for(var a=A(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=y(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=oa().indexOf("MSIE")&&(c.onresize=function(a,b,c,d){return function(){b.style.height=
@ -150,17 +150,17 @@ function le(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.sa&&(a.g("
n,void 0===f[2])a.g("begin assemble at "+Z(n.B)),a.sa=!0,G(a.b);else{var p;a.g("not supported yet");p=[];if(p.length){for(var z=0;z<p.length;z++)a.Ab(n,p[z],1);a.g(me(a,a.ka))}}break;case "b":a:{var C=f[0],v=f[1],Ea=b;if("?"==v)a.g("breakpoint commands:"),a.g("\tbi [p]\ttoggle break on input port [p]"),a.g("\tbo [p]\ttoggle break on output port [p]"),a.g("\tbp [a]\tset exec breakpoint at addr [a]"),a.g("\tbr [a]\tset read breakpoint at addr [a]"),a.g("\tbw [a]\tset write breakpoint at addr [a]"),
a.g("\tbc [a]\tclear breakpoint at addr [a]"),a.g("\tbl\tlist all breakpoints"),a.g("\tbn [n]\tbreak after [n] instruction(s)");else{var D=C.charAt(1);if("l"==D){var Za=0,Za=Za+ke(a,a.A),Za=Za+ke(a,a.ca);(Za+=ke(a,a.I))||a.g("no breakpoints")}else if("n"==D)a.Ca=Re(a,v),a.g("break after "+a.Ca+" instruction(s)");else if(void 0===v)a.g("missing breakpoint address");else{var J=W();if("*"!=v&&(J=Y(a,v,!0),!J))break a;v=r(J.B);"c"==D?null==J.B?(Jd(a),a.g("all breakpoints cleared")):ie(a,a.A,J)||ie(a,
a.ca,J)||ie(a,a.I,J)||a.g("breakpoint missing: "+Z(J.B)):"i"==D?a.g("breakpoint "+(Eb(a.D,J.B)?"enabled":"cleared")+": port "+v+" (input)"):"o"==D?a.g("breakpoint "+(Hb(a.D,J.B)?"enabled":"cleared")+": port "+v+" (output)"):null!=J.B&&(Yd(a,J,Ea),"p"==D?a.Ea(a.A,J):"r"==D?a.Ea(a.ca,J):"w"==D?a.Ea(a.I,J):a.g("unknown breakpoint command: "+D))}}}break;case "c":a.Fa&&(a.Fa.value="");break;case "d":a:{var $a,ab=f[0],sa=f[1],Ja=f[2],xf=f[3];if("?"==sa){var ta="";for($a in Rd)a.$a[$a]&&(ta&&(ta+=","),ta+=
$a);ta+=",state,symbols";a.g("dump memory commands:");a.g("\tdb [a] [#] dump # bytes at address a");a.g("\tdw [a] [#] dump # words at address a");a.g("\tdd [a] [#] dump # dwords at address a");a.g("\tdh [#] [#] dump # instructions from history");ta.length&&a.g("dump extension commands:\n\t"+ta)}else if("state"==sa){var ne=bf(a.u,!0);"console"==Ja?console.log(ne):(a.Fa&&(a.Fa.value=""),a.g(ne))}else if("symbols"==sa)for(var Oc=0;Oc<a.J.length;Oc++){var Pc=a.J[Oc],cb;for(cb in Pc.xa)if("."!=
cb.charAt(0)){var oe=Pc.xa[cb].o;if(void 0!==oe){var pe=Pc.xa[cb].l;pe&&(cb=pe);a.g(Z(oe)+" "+cb)}}}else{if("d"==ab){for($a in Rd)if(f[1]==$a){var qe=a.$a[$a];qe?(f.shift(),f.shift(),qe(f)):a.g("no dump registered for "+sa);break a}sa||(ab=a.fc||"db")}else a.fc=ab;if("dh"==ab){var re=sa,se=Ja,te="",ue=0,Q=a.ta,ua=a.W;if(ua.length){var U=+re||a.Lb,db=+se||10;isNaN(U)?U=db:te="more ";U>ua.length&&(a.g("note: only "+ua.length+" available"),U=ua.length);Q-=U;0>Q&&(null==ua[ua.length-1].B?(U=Q+U,Q=0):
Q+=ua.length);var Qc=[];"call"==se&&(db=1E5,Qc=["CALL"]);for(void 0!==re&&a.g(U+" instructions earlier:");0<db&&Q!=a.ta;){var ve=ua[Q++];if(null==ve.B)break;var xb=W(ve.B),yf=U--,we=me(a,xb,"history",yf);(!Qc.length||0<=we.indexOf(Qc[0]))&&a.g(we);xb.sb&&(Q+=xb.sb,db-=xb.sb,U-=xb.sb);Q>=ua.length&&(Q=0);a.Lb=U;ue++;db--}}ue||(a.g("no "+te+"history available"),a.Lb=void 0)}else{var cc=Y(a,sa);if(cc){var dc=0;Ja&&("l"==Ja.charAt(0)&&(Ja=Ja.substr(1)||xf),dc=Re(a,Ja)>>>0,65536<dc&&(dc=65536));for(var Ka=
"",zf=(dc||128)+15>>4||1,Rc="dd"==ab?4:"dw"==ab?2:1,xe=0;xe<zf;xe++){for(var ec=0,Sc=0,yb="",Tc="",sa=Z(cc.B),Uc=0;16>Uc;Uc++){var fc=a.V(cc,1),ec=ec|fc<<(Sc++<<3);Sc==Rc&&(yb+=q(ec,2*Rc),yb+=1==Rc?7==Uc?"-":" ":" ",ec=Sc=0);Tc+=32<=fc&&128>fc?String.fromCharCode(fc):"."}Ka&&(Ka+="\n");Ka+=sa+" "+yb+" "+Tc}Ka&&a.g(Ka);a.Fb=cc}}}}break;case "e":if("else"==f[0])break;var gc=1,ye=255,ze=a.V,Ae=a.Ab;"ew"==f[0]&&(gc=2,ye=65535,ze=a.mb,Ae=a.Ub);var Be=gc<<1,Ce=f[1];if(null==Ce)a.g("edit memory commands:"),
a.g("\teb [a] [...] edit bytes at address a"),a.g("\tew [a] [...] edit words at address a");else{var hc=Y(a,Ce);if(hc)for(var ic=2;ic<f.length;ic++){var zb=Xd(a,f[ic]);if(void 0===zb){a.g("unrecognized value: "+f[ic]);break}zb&~ye&&a.g("warning: "+q(zb)+" exceeds "+gc+"-byte value");var Af=ze.call(a,hc);a.g("changing "+Z(hc.B)+" from 0x"+q(Af,Be)+" to 0x"+q(zb,Be));Ae.call(a,hc,zb,gc)}}break;case "f":We(a,f[1]);break;case "g":a:{var De=f[1],Bf=b;if(void 0!==De){var Vc=Y(a,De,!0);if(!Vc)break a;
Yd(a,Vc,Bf);a.Ea(a.A,Vc,!0)}a.La(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":var Wc;a.w.ia?(Wc="halting",a.da()):Wc="already halted";c||a.g(Wc);break;case "i":if("if"==f[0]){var Xc;var Ab=b.substr(2),Ab=ha(Ab);Xd(a,Ab)?(c||a.g("true: "+Ab),Xc=!0):(c||a.g("false: "+Ab),Xc=!1);Xc||(d=!1);break}var Yc=f[1];if(Yc&&"?"!=Yc){var Zc=Re(a,Yc);if(void 0!==Zc){var Cf=Fb(a.D,Zc);a.g(r(Zc)+": "+("0x"+q(Cf,2)))}}else a.g("input commands:"),a.g("\ti [p]\tread port [p]"),a.g("warning: port accesses can affect hardware state");
break;case "k":var Df=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var $c=0,Ee=W(),Bb=W(a.b.ba);for(a.g("stack trace for "+Z(Bb.B));10>$c;){for(var La=null,Ef=256;65536>Bb.B>>>0;){Ee.B=a.mb(Bb,2);if(null==Bb.B||!Ef--)break;for(var Ff=a,jc=Ee,Fe=null,Cb=jc.B,Ge=Cb,ad=1;6>=ad&&Cb;ad++){if(2<ad){jc.B=Cb;var kc=me(Ff,jc);if(0<kc.indexOf("CALL")){var He=kc.indexOf(" ");if(Cb+(kc.indexOf(" ",He+1)-He-1)/2==Ge){Fe=kc;break}}}Cb--}jc.B=
Ge;if(La=Fe)break}if(!La||null==La)break;var Ie=null;if("ks"==Df){var Je=La.match(/[0-9A-F]+$/);Je&&(Ie=Ye(a,Je[0]))}La=ga(La,50)+" ;"+(Ie||"stack="+Z(Bb.B));a.g(La);$c++}$c||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){Ye(a,f[1],!0);break}break;case "m":a:{var va,wa=null,E=f[1];"?"==E&&(E=void 0);if(void 0!==E){var Ma=0;if("all"==E)Ma=1610481663,E=null;else if("on"==E)wa=!0,E=null;else if("off"==E)wa=!1,E=null;else{"keys"==E&&(E="key");"kbd"==E&&(E="keyboard");for(va in Rd)if(E==
va){Ma=Rd[va];wa=!!(a.ga&Ma);break}if(!Ma){a.g("unknown message category: "+E);break a}}Ma&&("on"==f[2]?(a.ga|=Ma,wa=!0):"off"==f[2]&&(a.ga&=~Ma,wa=!1))}var Gf=0,Fa="";for(va in Rd)if(!E||E==va){var Hf=!!(a.ga&Rd[va]);if(null===wa||wa==Hf)Fa&&(Fa+=","),++Gf%10||(Fa+="\n\t"),"key"==va&&(va="keys"),Fa+=va}void 0===E&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==wa?wa?"messages on: ":"messages off: ":"message categories:\n\t")+(Fa||"none"));Kd(a)}break;case "o":var bd=
f[1],If=f[2];if(bd&&"?"!=bd){var cd=Re(a,bd,"port #"),dd=Re(a,If);void 0!==cd&&void 0!==dd&&(Ib(a.D,cd,dd),a.g(r(cd)+": "+("0x"+q(dd,2))))}else a.g("output commands:"),a.g("\to [p] [b]\twrite byte [b] to port [p]"),a.g("warning: port accesses can affect hardware state");break;case "p":if("print"==f[0]){$e(a,b.substr(5));break}var Ke="pr"==f[0]?1:0,Jf=1+Ke;if(a.ea)a.g("step in progress");else{var ed=W(a.b.O);switch(a.V(ed)){case 205:a.ea=Jf,Td(ed,3)}a.ea?(a.Ea(a.A,ed,!0),a.La()||(a.u&&a.u.jb(),a.ea=
0)):af(a,Ke?"tr":"t")}break;case "r":if("reset"==b){a.u&&a.u.reset();break}fe(a,f);break;case "s":Ze(a,f);break;case "t":af(a,f[0],f[1]);break;case "u":ge(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Xe(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.21.7 ("+a.b.Ra+",RELEASE"+(mb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(oa());break;case "?":if(f[1]){$e(a,b.substr(1));break}var Db="commands:",fd;for(fd in Md)Db+="\n"+ga(fd,7)+Md[fd];qd(a)||(Db+="\nnote: frequency/history disabled if no exec breakpoints");
$a);ta+=",state,symbols";a.g("dump memory commands:");a.g("\tdb [a] [#] dump # bytes at address a");a.g("\tdw [a] [#] dump # words at address a");a.g("\tdd [a] [#] dump # dwords at address a");a.g("\tdh [#] [#] dump # instructions from history");ta.length&&a.g("dump extension commands:\n\t"+ta)}else if("state"==sa){var ne=bf(a.u,!0);"console"==Ja?console.log(ne):(a.Fa&&(a.Fa.value=""),a.g(ne))}else if("symbols"==sa)for(var Pc=0;Pc<a.J.length;Pc++){var Qc=a.J[Pc],cb;for(cb in Qc.xa)if("."!=
cb.charAt(0)){var oe=Qc.xa[cb].o;if(void 0!==oe){var pe=Qc.xa[cb].l;pe&&(cb=pe);a.g(Z(oe)+" "+cb)}}}else{if("d"==ab){for($a in Rd)if(f[1]==$a){var qe=a.$a[$a];qe?(f.shift(),f.shift(),qe(f)):a.g("no dump registered for "+sa);break a}sa||(ab=a.fc||"db")}else a.fc=ab;if("dh"==ab){var re=sa,se=Ja,te="",ue=0,Q=a.ta,ua=a.W;if(ua.length){var U=+re||a.Lb,db=+se||10;isNaN(U)?U=db:te="more ";U>ua.length&&(a.g("note: only "+ua.length+" available"),U=ua.length);Q-=U;0>Q&&(null==ua[ua.length-1].B?(U=Q+U,Q=0):
Q+=ua.length);var Rc=[];"call"==se&&(db=1E5,Rc=["CALL"]);for(void 0!==re&&a.g(U+" instructions earlier:");0<db&&Q!=a.ta;){var ve=ua[Q++];if(null==ve.B)break;var xb=W(ve.B),yf=U--,we=me(a,xb,"history",yf);(!Rc.length||0<=we.indexOf(Rc[0]))&&a.g(we);xb.sb&&(Q+=xb.sb,db-=xb.sb,U-=xb.sb);Q>=ua.length&&(Q=0);a.Lb=U;ue++;db--}}ue||(a.g("no "+te+"history available"),a.Lb=void 0)}else{var cc=Y(a,sa);if(cc){var dc=0;Ja&&("l"==Ja.charAt(0)&&(Ja=Ja.substr(1)||xf),dc=Re(a,Ja)>>>0,65536<dc&&(dc=65536));for(var Ka=
"",zf=(dc||128)+15>>4||1,Sc="dd"==ab?4:"dw"==ab?2:1,xe=0;xe<zf;xe++){for(var ec=0,Tc=0,yb="",Uc="",sa=Z(cc.B),Vc=0;16>Vc;Vc++){var fc=a.V(cc,1),ec=ec|fc<<(Tc++<<3);Tc==Sc&&(yb+=q(ec,2*Sc),yb+=1==Sc?7==Vc?"-":" ":" ",ec=Tc=0);Uc+=32<=fc&&128>fc?String.fromCharCode(fc):"."}Ka&&(Ka+="\n");Ka+=sa+" "+yb+" "+Uc}Ka&&a.g(Ka);a.Fb=cc}}}}break;case "e":if("else"==f[0])break;var gc=1,ye=255,ze=a.V,Ae=a.Ab;"ew"==f[0]&&(gc=2,ye=65535,ze=a.mb,Ae=a.Ub);var Be=gc<<1,Ce=f[1];if(null==Ce)a.g("edit memory commands:"),
a.g("\teb [a] [...] edit bytes at address a"),a.g("\tew [a] [...] edit words at address a");else{var hc=Y(a,Ce);if(hc)for(var ic=2;ic<f.length;ic++){var zb=Xd(a,f[ic]);if(void 0===zb){a.g("unrecognized value: "+f[ic]);break}zb&~ye&&a.g("warning: "+q(zb)+" exceeds "+gc+"-byte value");var Af=ze.call(a,hc);a.g("changing "+Z(hc.B)+" from 0x"+q(Af,Be)+" to 0x"+q(zb,Be));Ae.call(a,hc,zb,gc)}}break;case "f":We(a,f[1]);break;case "g":a:{var De=f[1],Bf=b;if(void 0!==De){var Wc=Y(a,De,!0);if(!Wc)break a;
Yd(a,Wc,Bf);a.Ea(a.A,Wc,!0)}a.La(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":var Xc;a.w.ia?(Xc="halting",a.da()):Xc="already halted";c||a.g(Xc);break;case "i":if("if"==f[0]){var Yc;var Ab=b.substr(2),Ab=ha(Ab);Xd(a,Ab)?(c||a.g("true: "+Ab),Yc=!0):(c||a.g("false: "+Ab),Yc=!1);Yc||(d=!1);break}var Zc=f[1];if(Zc&&"?"!=Zc){var $c=Re(a,Zc);if(void 0!==$c){var Cf=Fb(a.D,$c);a.g(r($c)+": "+("0x"+q(Cf,2)))}}else a.g("input commands:"),a.g("\ti [p]\tread port [p]"),a.g("warning: port accesses can affect hardware state");
break;case "k":var Df=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var ad=0,Ee=W(),Bb=W(a.b.ba);for(a.g("stack trace for "+Z(Bb.B));10>ad;){for(var La=null,Ef=256;65536>Bb.B>>>0;){Ee.B=a.mb(Bb,2);if(null==Bb.B||!Ef--)break;for(var Ff=a,jc=Ee,Fe=null,Cb=jc.B,Ge=Cb,bd=1;6>=bd&&Cb;bd++){if(2<bd){jc.B=Cb;var kc=me(Ff,jc);if(0<kc.indexOf("CALL")){var He=kc.indexOf(" ");if(Cb+(kc.indexOf(" ",He+1)-He-1)/2==Ge){Fe=kc;break}}}Cb--}jc.B=
Ge;if(La=Fe)break}if(!La||null==La)break;var Ie=null;if("ks"==Df){var Je=La.match(/[0-9A-F]+$/);Je&&(Ie=Ye(a,Je[0]))}La=ga(La,50)+" ;"+(Ie||"stack="+Z(Bb.B));a.g(La);ad++}ad||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){Ye(a,f[1],!0);break}break;case "m":a:{var va,wa=null,E=f[1];"?"==E&&(E=void 0);if(void 0!==E){var Ma=0;if("all"==E)Ma=1610481663,E=null;else if("on"==E)wa=!0,E=null;else if("off"==E)wa=!1,E=null;else{"keys"==E&&(E="key");"kbd"==E&&(E="keyboard");for(va in Rd)if(E==
va){Ma=Rd[va];wa=!!(a.ga&Ma);break}if(!Ma){a.g("unknown message category: "+E);break a}}Ma&&("on"==f[2]?(a.ga|=Ma,wa=!0):"off"==f[2]&&(a.ga&=~Ma,wa=!1))}var Gf=0,Fa="";for(va in Rd)if(!E||E==va){var Hf=!!(a.ga&Rd[va]);if(null===wa||wa==Hf)Fa&&(Fa+=","),++Gf%10||(Fa+="\n\t"),"key"==va&&(va="keys"),Fa+=va}void 0===E&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==wa?wa?"messages on: ":"messages off: ":"message categories:\n\t")+(Fa||"none"));Kd(a)}break;case "o":var cd=
f[1],If=f[2];if(cd&&"?"!=cd){var dd=Re(a,cd,"port #"),ed=Re(a,If);void 0!==dd&&void 0!==ed&&(Ib(a.D,dd,ed),a.g(r(dd)+": "+("0x"+q(ed,2))))}else a.g("output commands:"),a.g("\to [p] [b]\twrite byte [b] to port [p]"),a.g("warning: port accesses can affect hardware state");break;case "p":if("print"==f[0]){$e(a,b.substr(5));break}var Ke="pr"==f[0]?1:0,Jf=1+Ke;if(a.ea)a.g("step in progress");else{var fd=W(a.b.O);switch(a.V(fd)){case 205:a.ea=Jf,Td(fd,3)}a.ea?(a.Ea(a.A,fd,!0),a.La()||(a.u&&a.u.jb(),a.ea=
0)):af(a,Ke?"tr":"t")}break;case "r":if("reset"==b){a.u&&a.u.reset();break}fe(a,f);break;case "s":Ze(a,f);break;case "t":af(a,f[0],f[1]);break;case "u":ge(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Xe(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.21.7 ("+a.b.Ra+",RELEASE"+(mb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(oa());break;case "?":if(f[1]){$e(a,b.substr(1));break}var Db="commands:",gd;for(gd in Md)Db+="\n"+ga(gd,7)+Md[gd];qd(a)||(Db+="\nnote: frequency/history disabled if no exec breakpoints");
a.g(Db);break;default:a.g("unknown command: "+b),d=!1}}}catch(Le){a.g("debugger error: "+(Le.stack||Le.message)),d=!1}return d}function oc(a,b,c){b=Zd(a,b,c);for(var d in b)if(!le(a,b[d]))return!1;return!0}Ia(function(){for(var a=A(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Hd(d);eb(d,c)}});function I(a,b,c){this.id=a.id;this.key=cf(a,b,c);this.C=a.C;df(this,a.Qb)}
function cf(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}
I.prototype={constructor:I,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){df(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}}};

View file

@ -81,7 +81,7 @@ Pb.prototype.W=function(){this.i&&(this.F&&this.F.a(this.id,this.j,this.c,this.i
function Qb(a,b,c,d){if(d)a.K("Unable to load system ROM (error "+d+": "+b+")");else{Ca(a.Na,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.b=f;else if(h)for(a.b=Array(4*h.length),d=c=0;c<h.length;c++)a.b[d++]=h[c]&255,a.b[d++]=h[c]>>8&255,a.b[d++]=h[c]>>16&255,a.b[d++]=h[c]>>24&255;else a.b=e;a.i=e.symbols;if(!a.b.length){q("Empty ROM: "+b);return}if(1==a.b.length){q(a.b[0]);return}}catch(g){a.K("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
" ").replace(/ +$/,"").split(" "),a.b=Array(b.length),e=0;e<b.length;e++)a.b[e]=aa(b[e]);Sb(a)}}
function Sb(a){if(!Ga(a))if(!a.h)B(a);else if(a.b&&a.B){a.c||(a.c=a.b.length);if(a.b.length!=a.c){var b="ROM size (0x"+n(a.b.length)+") does not match specified size ("+("0x"+n(a.c))+")";a.g.aa=!0;a.K(b)}else if(Tb(a,a.j)){b=[];"number"==typeof a.f?b.push(a.f):null!=a.f&&a.f.length&&(b=a.f);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.B,h=d.c,g=[],k=d.j>>>f.H;0<h&&k<f.b.length;)g.push(f.b[k++]),h-=f.I;f=d.B;d=d.c;h=0;for(e>>>=f.H;0<d&&e<f.b.length;){k=g[h++];if(!k)break;f.b[e++]=k;d-=f.I}}delete a.b}B(a)}}
function Tb(a,b){if(Oa(a.B,b,a.c,a.l?1:Xa)){var c;for(c=0;c<a.b.length;c++)Qa(a.B,b+c,a.b[c]);if(a.l&&256==b){for(c=0;c<Rb.length;c++)Qa(a.B,Rb[c],118);vb(a.a,function(a){return function(b){a.F&&(a.M("CP/M vector 0x"+n(b,4)),D(a.a,b),mb(a.F))}}(a));xb(a.a,b)}return!0}return!1}t(function(){for(var a=A(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Pb(d);Ea(d,c)}});function Ub(a){u.call(this,"RAM",a,Ub);this.f=a.addr;this.c=a.size;this.b=!1}x(Ub);m=Ub.prototype;
function Tb(a,b){if(Oa(a.B,b,a.c,a.l?1:Xa)){var c;for(c=0;c<a.b.length;c++)Qa(a.B,b+c,a.b[c]);if(a.l&&256==b){for(c=0;c<Rb.length;c++)Qa(a.B,Rb[c],118);vb(a.a,function(a){return function(b){0<=Rb.indexOf(b)&&a.F&&(a.M("CP/M vector 0x"+n(b,4)),D(a.a,b),mb(a.F))}}(a));xb(a.a,b)}return!0}return!1}t(function(){for(var a=A(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Pb(d);Ea(d,c)}});function Ub(a){u.call(this,"RAM",a,Ub);this.f=a.addr;this.c=a.size;this.b=!1}x(Ub);m=Ub.prototype;
m.ba=function(a,b,c,d){this.B=b;this.a=c;this.F=d;B(this)};m.W=function(a,b){b||this.reset();return!0};m.V=function(a){return a?this.save():!0};m.reset=function(){!this.b&&this.c&&Oa(this.B,this.f,this.c,1)&&(this.b=!0,this.status(Math.floor(this.c/1024)+"Kb allocated"));this.b||q("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};t(function(){for(var a=A(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Ub(d);Ea(d,c)}});
function Vb(a){u.call(this,"Keyboard",a,Vb);B(this)}x(Vb);t(function(){for(var a=A(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Vb(d);Ea(d,c)}});function Wb(a){u.call(this,"Video",a,Wb);this.fb=a.interruptRate;this.X=a.refreshRate||60;B(this)}x(Wb);Wb.prototype.ba=function(a,b,c,d){this.w=a;this.B=b;this.a=c;this.F=d};
t(function(){for(var a=A(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=z(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(c.onresize=function(a,