Promoted version to 1.34.1

This commit is contained in:
Jeff Parsons 2017-02-28 16:36:15 -08:00 committed by Jeff Parsons
commit 32ff93ef3e
46 changed files with 14372 additions and 0 deletions

View file

@ -0,0 +1,194 @@
(function(){/*
http://pcjs.org/modules/shared/lib/dumpapi.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/reportapi.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/strlib.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/weblib.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/embed.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/defines.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/usrlib.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/component.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/defines.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/panel.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/cpu.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/rom.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/ram.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/keyboard.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/video.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/serial.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/disk.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/debugger.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/computer.js (C) Jeff Parsons 2012-2017
*/
var f;function p(a,b){function c(){}c.prototype=b.prototype;a.prototype=new c;a.prototype.constructor=a;for(var d in b)if(Object.defineProperties){var e=Object.getOwnPropertyDescriptor(b,d);e&&Object.defineProperty(a,d,e)}else a[d]=b[d]}
for(var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},q="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global?global:this,ba=["Math","trunc"],ca=0;ca<ba.length-1;ca++){var da=ba[ca];da in q||(q[da]={});q=q[da]}
var ea=ba[ba.length-1],fa=q[ea],ga=fa?fa:function(a){a=Number(a);if(isNaN(a)||Infinity===a||-Infinity===a||!a)return a;var b=Math.floor(Math.abs(a));return 0>a?-b:b};ga!=fa&&null!=ga&&aa(q,ea,{configurable:!0,writable:!0,value:ga});function t(a,b,c){b?9<b&&(b=9):b=a&-65536?8:4;c=c?"0x":"";var d="";if(null==a||isNaN(a))for(;0<b--;)d="?"+d;else for(0>a&&-1<a&&(a=-1);0<b--;){var e=a%16,e=e+(0<=e&&9>=e?48:55),d=String.fromCharCode(e)+d;a=Math.trunc(a/16)}return(void 0===c?"":c)+d}
function u(a){return t(a,2,!0)}function v(a){return t(a,4,!0)}function ha(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}function ia(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function ja(a){return a.replace(/[&<>"']/g,function(a){return ka[a]})}var ka={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"},la=Date.now||function(){return+new Date};
function w(a,b){var c=!0,c=void 0===c?!1:c,d=0,e=null;if("object"==typeof resources&&(e=resources[a]))b&&b(a,e,d);else if(c&&"function"==typeof resources)resources(a,function(c,d){b&&b(a,c,d)});else{var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(e=g.responseText,200==g.status||!g.status&&e.length&&"file:"==(window?window.location.protocol:"file:")||(d=g.status||-1),b&&b(a,e,d))});g.open("GET",
a,c);g.send();c||(e=g.responseText,200!=g.status&&(d=g.status||-1),b&&b(a,e,d))}}function x(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}function ma(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function na(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,g=!1;a.onmousedown=function(){g||e||(d=500,c())};a.ontouchstart=function(){e||(d=500,c())};a.onmouseup=a.onmouseout=function(){e&&(clearTimeout(e),e=null)};a.ontouchend=a.ontouchcancel=function(){e&&(clearTimeout(e),e=null);g=!0}}function oa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function y(a){z.init.push(a)}
function pa(a){if(qa)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){A(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function B(a){!qa&&a?(qa=!0,ra&&sa("init"),ta&&sa("show")):qa=a}function sa(a){z[a]&&pa(z[a])}var ua=null,z={init:[],show:[],exit:[]},ra=!1,ta=!1,qa=!0;oa("onload",function(){ra=!0;pa(z.init)});oa("onpageshow",function(){ta=!0;pa(z.show)});oa(x("Opera")||x("iOS")?"onunload":"onbeforeunload",function(){pa(z.exit)});
function C(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.exports={};this.H=this.bindings={};a=this.id.indexOf(".");0>a?this.fb=this.id:(this.nb=this.id.substr(0,a),this.fb=this.id.substr(a+1));this.C={ready:!1,Ga:!1,bb:!1,N:!1,error:!1};this.eb=null;this.C.error=!1;this.ma=c||0;this.u=this.s=this.U=this.Sa=null;D.push(this)}function A(a){window&&window.alert(a)}
function va(a,b){if(void 0!==a){var c;b&&0<(c=b.indexOf("."))&&(a=b.substr(0,c+1)+a);for(c=0;c<D.length;c++)if(D[c].id===a)return D[c]}return null}function wa(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<D.length;d++)if(c)c==D[d]&&(c=null);else if(!(a!=D[d].type||b&&D[d].id.indexOf(b)))return D[d]}return null}function E(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){A(c.message+" ("+a+")")}return b}
function F(a,b){b=G(b.parentNode,"c1pjs-control");for(var c=0;c<b.length;c++)for(var d=b[c].childNodes,e=0;e<d.length;e++){var g=d[e];if(1===g.nodeType){var h=g.getAttribute("class");if(h)for(var l=h.split(" "),k=0;k<l.length;k++)switch(h=l[k],h){case "c1pjs-binding":(h=E(g))&&h.binding&&a.T(h.type,h.binding,g,h.value),k=l.length}}}}
function G(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var e=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)e.test(a[b].className)&&c.push(a[b]);return c}
function xa(a){for(var b=!0,c=ya[a];c&&c.length;){var d=c.splice(0,1)[0],e=d[0],g=null;0<=za.indexOf(e)&&(g=function(){return function(){xa(a)}}());var h=Aa[e];if(h)if(!g)b=h(d[1],d[2],d[3]);else{if(!h(g,d[1],d[2],d[3]))break}else{var b=!1,l=wa(d[1],a);if(l)if(h=Ba[e])b=h(l,d[2],d[3]);else{var k=l.exports;if(k&&(h=k[e]))if(b=!0,!g)b=h.call(l,d[2],d[3]);else if(!h.call(l,g,d[2],d[3]))break}}if(!b){A("Script error: "+e+(h?" failed":" unrecognized"));break}}c&&!c.length&&delete ya[a];return b}f=C.prototype;
f.toString=function(){return this.name?this.name:this.id||this.type};
f.T=function(a,b,c){switch(b){case "clear":return this.H[b]||(this.H[b]=c,c.onclick=function(a){return function(){a.H.print&&(a.H.print.value="")}}(this)),!0;case "print":return this.H[b]||(this.Sa=this.H[b]=c,c.value="",this.l=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),this.Wa=function(a){this.l(a,this.fb)}),!0;default:return!1}};f.log=function(){};f.l=function(){};
f.status=function(a){this.l(this.fb+": "+a)};f.Wa=function(a,b,c){c=c||this.type;b||A((c?c+": ":"")+a)};function Ca(a,b){a.C.error=!0;a.Wa(b)}function H(a,b){b&&(a.C.ready?b():a.eb=b);return a.C.ready}f.X=function(a){this.C.error||(this.C.ready=!1!==a,this.C.ready&&(a=this.eb,this.eb=null,a&&a()))};function I(a,b){a.C.Ga&&(b?a.C.bb=!0:void 0===b&&a.l(a.toString()+" busy"));return a.C.Ga}
function J(a,b){if(a.C.bb)return a.C.Ga=!1,a.C.bb=!1;if(a.C.error)return a.l(a.toString()+" error"),!1;a.C.Ga=b;return a.C.Ga}function K(a,b){if(a.u){a===a.u?b|=0:b=b||a.ma;var c=a.u.ma&b;return!!b&&c===b||!!(c&a.u.Re)}return!1}window&&(window.PCjs||(window.PCjs={}),window.PCjs.Machines||(window.PCjs.Machines={}),window.PCjs.Components||(window.PCjs.Components=[]),window.PCjs.Commands||(window.PCjs.Commands={}));
var L=window?window.PCjs.Machines:{},D=window?window.PCjs.Components:[],ya=window?window.PCjs.Commands:{},za=["hold","sleep","wait"],Aa={alert:function(a){A(a);return!0},sleep:function(a,b){setTimeout(a,+b);return!1}},Ba={select:function(a,b,c){var d=!1;if(a=a.bindings[b])for(b=0;b<a.options.length;b++)if(a.options[b].textContent==c){a.selectedIndex!=b&&(a.selectedIndex=b);d=!0;break}return d}};
Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){b=b||0;for(var c=this.length;b<c;b++)if(this[b]===a)return b;return-1});Array.isArray||(Array.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)});
Function.prototype.bind||(Function.prototype.bind=function(a){function b(){return e.apply(this instanceof c&&a?this:a,d.concat(Array.prototype.slice.call(arguments)))}function c(){}if("function"!=typeof this)throw new TypeError("Function.prototype.bind: non-callable object");var d=Array.prototype.slice.call(arguments,1),e=this;c.prototype=this.prototype;b.prototype=new c;return b});function Da(a){C.call(this,"C1PPanel",a);this.C.N=!1}p(Da,C);
Da.prototype.T=function(a,b,c,d){return this.U&&this.U.T(a,b,c,d)||this.s&&this.s.T(a,b,c,d)||this.b&&this.b.T(a,b,c,d)||this.u&&this.u.T(a,b,c,d)?!0:C.prototype.T.call(this,a,b,c,d)};Da.prototype.ia=function(a,b){a&&!this.C.N&&(this.C.N=!0,this.U=b,this.s=M(b,"cpu"),this.b=M(b,"keyboard"),this.u=M(b,"debugger"),Ea())};function Ea(){for(var a=!1,b=G(document,"c1pjs","panel"),c=0;c<b.length;c++){var d=b[c],e=E(d),g=va(e.id);g||(a=!0,g=new Da(e));F(g,d);a&&g.X()}}y(Ea);
function Fa(a){C.call(this,"C1PCPU",a);Ga(this);this.C.N=!1;this.C.oa=!1;this.Va=a.autoStart;this.Pa=0;this.Ne=1;this.Oe=2;this.I=this.Pa;this.La=30;this.Ka=5;this.Ea=8;this.Ua=["Slow","Fast","Max"];this.jb=["(1Mhz)","(up to "+this.Ea+"Mhz)","(unlimited)"];this.R=[];this.K=[];this.qa=65536;this.ra=0;this.fa=65536;this.ja=0;this.Oa=32;this.ab=2;this.Me=1;this.o=[this.sc,this.Md,this.De,this.m,this.m,this.Od,this.ic,this.m,this.Rd,this.Ld,this.hc,this.m,this.m,this.Id,this.fc,this.m,this.rc,this.Nd,
this.m,this.m,this.m,this.Pd,this.jc,this.m,this.vc,this.Kd,this.m,this.m,this.m,this.Jd,this.gc,this.m,this.jd,this.bc,this.m,this.m,this.oc,this.dc,this.Xd,this.m,this.Td,this.ac,this.Wd,this.m,this.nc,this.Yb,this.Ud,this.m,this.pc,this.cc,this.m,this.m,this.m,this.ec,this.Yd,this.m,this.ne,this.$b,this.m,this.m,this.m,this.Zb,this.Vd,this.m,this.de,this.Xc,this.m,this.m,this.m,this.Zc,this.Fd,this.m,this.Qd,this.Wc,this.Ed,this.m,this.hd,this.Tc,this.Cd,this.m,this.tc,this.Yc,this.m,this.m,this.m,
this.$c,this.Gd,this.m,this.xc,this.Vc,this.m,this.m,this.m,this.Uc,this.Dd,this.m,this.ee,this.sb,this.m,this.m,this.m,this.ub,this.be,this.m,this.Sd,this.rb,this.ae,this.m,this.gd,this.ob,this.Zd,this.m,this.uc,this.tb,this.m,this.m,this.m,this.vb,this.ce,this.m,this.pe,this.qb,this.m,this.m,this.m,this.pb,this.$d,this.m,this.m,this.te,this.m,this.m,this.Be,this.ve,this.ye,this.m,this.Sc,this.m,this.He,this.m,this.Ae,this.qe,this.xe,this.m,this.kc,this.ue,this.m,this.m,this.Ce,this.we,this.ze,this.m,
this.Je,this.se,this.Ie,this.m,this.m,this.re,this.m,this.m,this.zd,this.od,this.ud,this.m,this.Ad,this.qd,this.vd,this.m,this.Fe,this.nd,this.Ee,this.m,this.xd,this.kd,this.sd,this.m,this.lc,this.pd,this.m,this.m,this.Bd,this.rd,this.wd,this.m,this.yc,this.md,this.Ge,this.m,this.yd,this.ld,this.td,this.m,this.Lc,this.Dc,this.m,this.m,this.Mc,this.Fc,this.Pc,this.m,this.fd,this.Cc,this.Rc,this.m,this.Kc,this.zc,this.Nc,this.m,this.qc,this.Ec,this.m,this.m,this.m,this.Gc,this.Qc,this.m,this.wc,this.Bc,
this.m,this.m,this.m,this.Ac,this.Oc,this.m,this.Ic,this.Ab,this.m,this.m,this.Jc,this.Cb,this.cd,this.m,this.ed,this.zb,this.Hd,this.m,this.Hc,this.wb,this.ad,this.m,this.mc,this.Bb,this.m,this.m,this.m,this.Db,this.dd,this.m,this.oe,this.yb,this.m,this.m,this.m,this.xb,this.bd,this.m];this.ib=[7,6,0,0,0,3,5,0,3,2,2,0,0,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,3,6,0,0,3,3,5,0,4,2,2,0,4,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,6,6,0,0,0,3,5,0,3,2,2,0,3,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,6,6,0,0,0,3,
5,0,4,2,2,0,5,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,0,6,0,0,3,3,3,0,2,0,2,0,4,4,4,0,2,5,0,0,4,4,4,0,2,4,2,0,0,4,0,0,2,6,2,0,3,3,3,0,2,2,2,0,4,4,4,0,2,5,0,0,4,4,4,0,2,4,2,0,4,4,4,0,2,6,0,0,3,3,5,0,2,2,2,0,4,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,2,6,0,0,3,3,5,0,2,2,2,0,4,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0]}p(Fa,C);f=Fa.prototype;
f.reset=function(a){this.C.oa&&this.aa();Ga(this);this.f=this.a[65532]|this.a[65533]<<8;this.C.error=!1;this.u?this.u.reset():a&&(!0===this.Va||null===this.Va&&!this.u&&void 0===this.H.run)&&this.ua()};
f.T=function(a,b,c){a=!1;switch(b){case "run":this.H[b]=c;c.onclick=function(a){return function(){a.C.oa?a.aa():a.ua()}}(this);a=!0;break;case "A":case "X":case "Y":case "S":case "PC":case "C":case "Z":case "I":case "D":case "B":case "V":case "N":case "speed":this.H[b]=c;a=!0;break;case "setSpeed":this.H[b]=c,c.onclick=function(a){return function(){N(a,2<=a.I?a.Pa:a.I+1,!0)}}(this),a=!0}return a};
f.ca=function(a,b,c){this.a=a;this.M=b;this.sa=c-b+1;this.Ca=this.M+this.sa;this.M?A("unsupported CPU address buffer offset ("+this.M+")"):this.X()};f.ia=function(a,b){if(a&&!this.C.N){this.U=b;(this.u=M(b,"debugger"))&&this.u.Ob();if(a=M(b,"video"))this.cb=function(a){return function(){Ha(a)}}(a),this.da=function(a){return function(){a.da()}}(a);this.C.N=!0;this.reset(!0);this.update()}};function Ia(a,b,c,d,e){0>Ja(a.R,b,c,d,e)&&(a.qa>b&&(a.qa=b),a.ra<c&&(a.ra=c),a.R.push([b,c,d,e]))}
function Ka(a,b,c){for(var d=0;d<a.R.length;d++)b>=a.R[d][0]&&b<=a.R[d][1]&&a.R[d][3].call(a.R[d][2],b,c)}function O(a,b,c,d,e){0>Ja(a.K,b,c,d,e)&&(a.fa>b&&(a.fa=b),a.ja<c&&(a.ja=c),a.K.push([b,c,d,e]))}function La(a,b,c){for(var d=0;d<a.K.length;d++)b>=a.K[d][0]&&b<=a.K[d][1]&&a.K[d][3].call(a.K[d][2],b,c)}function Ja(a,b,c,d,e){for(var g=0;g<a.length;g++)if(a[g][0]==b&&a[g][1]==c&&a[g][2]==d&&a[g][3]==e)return g;return-1}
function N(a,b,c){void 0!==b&&(a.I=b,a.H.setSpeed&&(a.H.setSpeed.innerHTML=a.Ua[2<=b?0:b+1]),a.l("running at "+a.Ua[b].toLowerCase()+" speed "+a.jb[b]),c&&a.da());a.W=0;a.Xa=la();Ma(a)}f.cb=function(){};f.da=function(){};function P(a,b,c,d){void 0!==a.H[b]&&(void 0===d&&(d=1),c="0000"+c.toString(16),a.H[b].innerHTML=c.slice(c.length-d).toUpperCase())}
function Na(a){P(a,"A",a.h,2);P(a,"X",a.w,2);P(a,"Y",a.F,2);var b=Oa(a);P(a,"C",b&1?1:0);P(a,"Z",b&2?1:0);P(a,"I",b&4?1:0);P(a,"D",b&8?1:0);P(a,"B",b&16?1:0);P(a,"V",b&64?1:0);P(a,"N",b&128?1:0);P(a,"S",a.G,4);P(a,"PC",a.f,4);a.H.speed&&a.L&&(a.H.speed.innerHTML=a.L.toFixed(1)+"Mhz")}
function Ma(a,b){var c=30;c<a.La&&(c=a.La);c<a.Ka&&(c=a.Ka);var d=1;b&&a.I>a.Pa&&a.L&&(d=a.L);d>a.Ea&&2>a.I&&(d=a.Ea);a.Pe=Math.round(1E3/30);a.ka=Math.floor(1E6/c*d);a.Ha=Math.floor(1E6/30*d);a.Za=Math.floor(1E6/a.La*d);a.Ya=Math.floor(1E6/a.Ka*d);b||(a.V=a.Ha,a.$=a.Za,a.Z=a.Ya);a.Ia=0}function Pa(a){var b=la(),c=a.Pe;a.ba&&(c=Math.round(c*a.ba/a.Ha));c-=b-a.Qe;if(b-=a.Xa)a.L=Math.round(a.W/(100*b))/10,864E5<=b&&N(a);0>c?c=0:1==a.I?a.L<=a.Ea&&(c=0):2==a.I&&(c=0);a.Ia+=a.ba;return c}
f.ua=function(){if(J(this,!0)){this.C.oa||(N(this),this.U&&this.U.start(),this.C.oa=!0,this.H.run&&(this.H.run.innerHTML="Halt"),this.da());1E6<=this.Ia&&Ma(this,!0);this.ba=0;this.Qe=la();try{do{this.step(this.ka);var a=this.O-this.D;this.W+=a;this.ba+=a;this.O=this.D=0;this.$-=this.ka;0>=this.$&&(this.$+=this.Za,this.cb());this.Z-=this.ka;0>=this.Z&&(this.Z+=this.Ya,Na(this));this.V-=this.ka;if(0>=this.V){this.V+=this.Ha;break}}while(this.C.oa)}catch(b){this.aa();this.update();J(this,!1);Ca(this,
b.stack||b.message);return}setTimeout(function(a){return function(){a.ua()}}(this),Pa(this))}else this.update(),this.U&&this.U.stop(this.Xa,this.W)};
f.step=function(a){var b=!0;this.b=this.g=-1;var c;if(c=a&&this.u)c=this.u,c=0<c.pa.length||0<c.va.length||0<c.xa.length;this.O=this.D=a;do{a=this.a[this.f];var d;if(d=c){d=this.u;var e=a,g=!1;Qa(d,this.f,d.pa,"exec")?g=!0:(d.L++,d.B[e][1]++,d.wa[d.Ja++]=d.s.f,d.Ja>=d.wa.length&&(d.Ja=0));d=!!g}if(d){b=void 0;this.aa();break}this.f++;this.o[a].call(this);if(0<=this.b){this.b>=this.qa&&this.b<=this.ra&&Ka(this,this.b,this.f);if(d=c)d=this.u,e=!1,Qa(d,this.b,d.va,"read")&&(e=!0),d=!!e;if(d){b=!1;this.aa();
break}this.b=-1}else if(0<=this.g){this.g>=this.fa&&this.g<=this.ja&&La(this,this.g,this.f);if(d=c){d=this.u;var e=this.g,g=this.a[this.g],h=!1;(g&255)!=g&&(d.l("invalid value at "+v(e)+": "+g),h=!0);Qa(d,e,d.xa,"write")&&(h=!0);d=!!h}if(d){b=!1;this.aa();break}this.g=-1}this.D-=this.ib[a]}while(0<this.D);return b};function Ra(a){a.V=0;a.O-=a.D;a.D=0}f.aa=function(){I(this,!0);this.O-=this.D;this.D=0;this.C.oa&&(this.C.oa=!1,this.H.run&&(this.H.run.innerHTML="Run"))};
f.update=function(){this.cb();Na(this)};function Sa(a){return a.C.oa?a.W+a.O-a.D:0}f.S=function(a){return this.a[a]};function Oa(a){var b=a.c&256?1:0,b=b|(a.j&255?0:2),b=b|((a.v&255^a.A^a.v>>1)&128?64:0),b=b|(a.i&128?128:0);return a.B&60|b}function Ta(a){a.B|=8;a.o[97]=a.Ub;a.o[101]=a.Wb;a.o[105]=a.Tb;a.o[109]=a.Qb;a.o[113]=a.Vb;a.o[117]=a.Xb;a.o[121]=a.Sb;a.o[125]=a.Rb;a.o[225]=a.je;a.o[229]=a.le;a.o[233]=a.ie;a.o[237]=a.fe;a.o[241]=a.ke;a.o[245]=a.me;a.o[249]=a.he;a.o[253]=a.ge}
function Ua(a){a.B&=-9;a.o[97]=a.sb;a.o[101]=a.ub;a.o[105]=a.rb;a.o[109]=a.ob;a.o[113]=a.tb;a.o[117]=a.vb;a.o[121]=a.qb;a.o[125]=a.pb;a.o[225]=a.Ab;a.o[229]=a.Cb;a.o[233]=a.zb;a.o[237]=a.wb;a.o[241]=a.Bb;a.o[245]=a.Db;a.o[249]=a.yb;a.o[253]=a.xb}function Q(a,b,c){var d=a.c&256?1:0,e=(b&15)+(c&15)+d;10<=e&&(e=e+6&15|16);e+=(b&240)+(c&240);a.A=b^c;a.v=e;a.i=e&255;160<=e&&(e+=96);512<=e&&(e-=256);a.c=e;a.j=b+c+d&255;a.D--;return e&255}
function R(a,b,c){var d=a.c&256?0:1,e=(b&15)-(c&15)-d;0>e&&(e=(e-6&15)-16);e+=(b&240)-(c&240);0>e&&(e-=96);a.i=a.j=(a.c=b-c-d)&255;a.A=b^c;a.v=a.c;a.c^=256;a.D--;return e&255}function Ga(a){a.h=0;a.w=0;a.F=0;a.G=256;a.B=0;a.i=0;a.j=0;a.A=0;a.v=0;a.c=0;a.f=0;a.b=-1;a.g=-1;a.L=0;a.W=a.O=a.D=0}
f.sc=function(){this.f++;this.a[this.G--]=this.f>>8;this.G|=256;this.a[this.G--]=this.f&255;this.G|=256;this.B|=16;this.B=Oa(this);this.a[this.G--]=this.B;this.G|=256;this.B&=239;this.b=65534;this.f=this.a[this.b]|this.a[this.b+1]<<8};f.Md=function(){this.b=this.a[this.f++]+this.w&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.i=this.j=this.h|=this.a[this.b]};f.Od=function(){this.b=this.a[this.f++];this.i=this.j=this.h|=this.a[this.b]};
f.ic=function(){this.g=this.a[this.f++];this.c=this.a[this.g]<<1;this.i=this.j=this.a[this.g]=this.c&255};f.Rd=function(){this.B=Oa(this);this.a[this.G--]=this.B;this.G|=256};f.Ld=function(){this.b=this.f++;this.i=this.j=this.h|=this.a[this.b]};f.hc=function(){this.c=this.h<<1;this.i=this.j=this.h=this.c&255};f.Id=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.h|=this.a[this.b]};
f.fc=function(){this.g=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.a[this.g]<<1;this.i=this.j=this.a[this.g]=this.c&255};f.rc=function(){this.f+=(this.i&128?0:(this.D--,this.a[this.f]<<24>>24))+1};f.Nd=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.F;this.i=this.j=this.h|=this.a[this.b]};f.Pd=function(){this.b=this.a[this.f++]+this.w&255;this.i=this.j=this.h|=this.a[this.b]};
f.jc=function(){this.g=this.a[this.f++]+this.w&255;this.c=this.a[this.g]<<1;this.i=this.j=this.a[this.g]=this.c&255};f.vc=function(){this.c=0};f.Kd=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.i=this.j=this.h|=this.a[this.b]};f.Jd=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.i=this.j=this.h|=this.a[this.b]};f.gc=function(){this.g=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.c=this.a[this.g]<<1;this.i=this.j=this.a[this.g]=this.c&255};
f.jd=function(){this.b=this.f++;this.a[this.G--]=this.f>>8;this.G|=256;this.a[this.G--]=this.f&255;this.G|=256;this.f=this.a[this.b]|this.a[this.b+1]<<8};f.bc=function(){this.b=this.a[this.f++]+this.w&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.i=this.j=this.h&=this.a[this.b]};f.oc=function(){this.b=this.a[this.f++];this.j=this.h&this.a[this.b];this.i=this.i&127|this.a[this.b]&128;this.v=0;this.A=this.a[this.b]&64?128:0};f.dc=function(){this.b=this.a[this.f++];this.i=this.j=this.h&=this.a[this.b]};
f.Xd=function(){this.g=this.a[this.f++];this.c=this.c&65280|this.a[this.g];this.c<<=1;this.c=this.c&65534|(this.c&512?1:0);this.i=this.j=this.a[this.g]=this.c&255};f.Td=function(){this.G=this.G+1&255|256;this.B=this.a[this.G];this.c=this.B&1?256:0;this.j=this.B&2?0:1;this.i=this.B&128;this.v=0;this.A=this.B&64?128:0};f.ac=function(){this.b=this.f++;this.i=this.j=this.h&=this.a[this.b]};
f.Wd=function(){this.c=this.c&65280|this.h;this.c<<=1;this.c=this.c&65534|(this.c&512?1:0);this.i=this.j=this.h=this.c&255};f.nc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.j=this.h&this.a[this.b];this.i=this.i&127|this.a[this.b]&128;this.v=0;this.A=this.a[this.b]&64?128:0};f.Yb=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.h&=this.a[this.b]};
f.Ud=function(){this.g=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.c&65280|this.a[this.g];this.c<<=1;this.c=this.c&65534|(this.c&512?1:0);this.i=this.j=this.a[this.g]=this.c&255};f.pc=function(){this.f+=(this.i&128?(this.D--,this.a[this.f]<<24>>24):0)+1};f.cc=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.F;this.i=this.j=this.h&=this.a[this.b]};f.ec=function(){this.b=this.a[this.f++]+this.w&255;this.i=this.j=this.h&=this.a[this.b]};
f.Yd=function(){this.g=this.a[this.f++]+this.w&255;this.c=this.c&65280|this.a[this.g];this.c<<=1;this.c=this.c&65534|(this.c&512?1:0);this.i=this.j=this.a[this.g]=this.c&255};f.ne=function(){this.c=256};f.$b=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.i=this.j=this.h&=this.a[this.b]};f.Zb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.i=this.j=this.h&=this.a[this.b]};
f.Vd=function(){this.g=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.c=this.c&65280|this.a[this.g];this.c<<=1;this.c=this.c&65534|(this.c&512?1:0);this.i=this.j=this.a[this.g]=this.c&255};f.de=function(){this.G=this.G+1&255|256;this.B=this.a[this.G];this.c=this.B&1?256:0;this.j=this.B&2?0:1;this.i=this.B&128;this.v=0;this.A=this.B&64?128:0;this.G=this.G+2&255|256;this.f=this.a[this.G-1|256]|this.a[this.G]<<8};
f.Xc=function(){this.b=this.a[this.f++]+this.w&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.i=this.j=this.h^=this.a[this.b]};f.Zc=function(){this.b=this.a[this.f++];this.i=this.j=this.h^=this.a[this.b]};f.Fd=function(){this.g=this.a[this.f++];this.c=this.c&65279|(this.a[this.g]&1?256:0);this.a[this.g]=(this.c=this.c&65280|this.a[this.g]>>1)&255;this.i=this.j=this.c&255};f.Qd=function(){this.a[this.G--]=this.h;this.G|=256};f.Wc=function(){this.b=this.f++;this.i=this.j=this.h^=this.a[this.b]};
f.Ed=function(){this.c=this.c&65279|(this.h&1?256:0);this.h=(this.c=this.c&65280|this.h>>1)&255;this.i=this.j=this.c&255};f.hd=function(){this.b=this.f;this.f=this.a[this.b]|this.a[this.b+1]<<8};f.Tc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.h^=this.a[this.b]};f.Cd=function(){this.g=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.c&65279|(this.a[this.g]&1?256:0);this.a[this.g]=(this.c=this.c&65280|this.a[this.g]>>1)&255;this.i=this.j=this.c&255};
f.tc=function(){this.f+=((this.v&255^this.A^this.v>>1)&128?0:(this.D--,this.a[this.f]<<24>>24))+1};f.Yc=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.F;this.i=this.j=this.h^=this.a[this.b]};f.$c=function(){this.b=this.a[this.f++]+this.w&255;this.i=this.j=this.h^=this.a[this.b]};f.Gd=function(){this.g=this.a[this.f++]+this.w&255;this.c=this.c&65279|(this.a[this.g]&1?256:0);this.a[this.g]=(this.c=this.c&65280|this.a[this.g]>>1)&255;this.i=this.j=this.c&255};
f.xc=function(){this.B&=251};f.Vc=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.i=this.j=this.h^=this.a[this.b]};f.Uc=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.i=this.j=this.h^=this.a[this.b]};f.Dd=function(){this.g=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.c=this.c&65279|(this.a[this.g]&1?256:0);this.a[this.g]=(this.c=this.c&65280|this.a[this.g]>>1)&255;this.i=this.j=this.c&255};
f.ee=function(){this.G=this.G+2&255|256;this.f=(this.a[this.G-1|256]|this.a[this.G]<<8)+1};f.sb=function(){this.b=this.a[this.f++]+this.w&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.c=this.h+this.a[this.b]+(this.c&256?1:0);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255};f.Ub=function(){this.b=this.a[this.f++]+this.w&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.h=Q(this,this.h,this.a[this.b])};
f.ub=function(){this.b=this.a[this.f++];this.c=this.h+this.a[this.b]+(this.c&256?1:0);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255};f.Wb=function(){this.b=this.a[this.f++];this.h=Q(this,this.h,this.a[this.b])};f.be=function(){this.g=this.a[this.f++];this.c=this.c&65280|this.a[this.g];this.c=this.c&65023|(this.c&1?512:0);this.c>>=1;this.i=this.j=this.a[this.g]=this.c&255};f.Sd=function(){this.G=this.G+1&255|256;this.i=this.j=this.h=this.a[this.G]};
f.rb=function(){this.b=this.f++;this.c=this.h+this.a[this.b]+(this.c&256?1:0);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255};f.Tb=function(){this.b=this.f++;this.h=Q(this,this.h,this.a[this.b])};f.ae=function(){this.c=this.c&65280|this.h;this.c=this.c&65023|(this.c&1?512:0);this.c>>=1;this.i=this.j=this.h=this.c&255};f.gd=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.f=this.a[this.b]|this.a[this.b+1]<<8};
f.ob=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.h+this.a[this.b]+(this.c&256?1:0);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255};f.Qb=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=Q(this,this.h,this.a[this.b])};f.Zd=function(){this.g=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.c&65280|this.a[this.g];this.c=this.c&65023|(this.c&1?512:0);this.c>>=1;this.i=this.j=this.a[this.g]=this.c&255};
f.uc=function(){this.f+=((this.v&255^this.A^this.v>>1)&128?(this.D--,this.a[this.f]<<24>>24):0)+1};f.tb=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.F;this.c=this.h+this.a[this.b]+(this.c&256?1:0);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255};f.Vb=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.F;this.h=Q(this,this.h,this.a[this.b])};
f.vb=function(){this.b=this.a[this.f++]+this.w&255;this.c=this.h+this.a[this.b]+(this.c&256?1:0);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255};f.Xb=function(){this.b=this.a[this.f++]+this.w&255;this.h=Q(this,this.h,this.a[this.b])};f.ce=function(){this.g=this.a[this.f++]+this.w&255;this.c=this.c&65280|this.a[this.g];this.c=this.c&65023|(this.c&1?512:0);this.c>>=1;this.i=this.j=this.a[this.g]=this.c&255};f.pe=function(){this.B|=4};
f.qb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.c=this.h+this.a[this.b]+(this.c&256?1:0);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255};f.Sb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.h=Q(this,this.h,this.a[this.b])};f.pb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.c=this.h+this.a[this.b]+(this.c&256?1:0);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255};
f.Rb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.h=Q(this,this.h,this.a[this.b])};f.$d=function(){this.g=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.c=this.c&65280|this.a[this.g];this.c=this.c&65023|(this.c&1?512:0);this.c>>=1;this.i=this.j=this.a[this.g]=this.c&255};f.te=function(){this.g=this.a[this.f++]+this.w&255;this.g=this.a[this.g]|this.a[this.g+1]<<8;this.a[this.g]=this.h};f.Be=function(){this.g=this.a[this.f++];this.a[this.g]=this.F};
f.ve=function(){this.g=this.a[this.f++];this.a[this.g]=this.h};f.ye=function(){this.g=this.a[this.f++];this.a[this.g]=this.w};f.Sc=function(){this.i=this.j=this.F=this.F-1&255};f.He=function(){this.i=this.j=this.h=this.w};f.Ae=function(){this.g=this.a[this.f++]|this.a[this.f++]<<8;this.a[this.g]=this.F};f.qe=function(){this.g=this.a[this.f++]|this.a[this.f++]<<8;this.a[this.g]=this.h};f.xe=function(){this.g=this.a[this.f++]|this.a[this.f++]<<8;this.a[this.g]=this.w};
f.kc=function(){this.f+=(this.c&256?0:(this.D--,this.a[this.f]<<24>>24))+1};f.ue=function(){this.g=this.a[this.f++];this.g=(this.a[this.g]|this.a[this.g+1]<<8)+this.F;this.a[this.g]=this.h};f.Ce=function(){this.g=this.a[this.f++]+this.w&255;this.a[this.g]=this.F};f.we=function(){this.g=this.a[this.f++]+this.w&255;this.a[this.g]=this.h};f.ze=function(){this.g=this.a[this.f++]+this.F&255;this.a[this.g]=this.w};f.Je=function(){this.i=this.j=this.h=this.F};
f.se=function(){this.g=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.a[this.g]=this.h};f.Ie=function(){this.G=this.w|256};f.re=function(){this.g=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.a[this.g]=this.h};f.zd=function(){this.b=this.f++;this.i=this.j=this.F=this.a[this.b]};f.od=function(){this.b=this.a[this.f++]+this.w&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.i=this.j=this.h=this.a[this.b]};f.ud=function(){this.b=this.f++;this.i=this.j=this.w=this.a[this.b]};
f.Ad=function(){this.b=this.a[this.f++];this.i=this.j=this.F=this.a[this.b]};f.qd=function(){this.b=this.a[this.f++];this.i=this.j=this.h=this.a[this.b]};f.vd=function(){this.b=this.a[this.f++];this.i=this.j=this.w=this.a[this.b]};f.Fe=function(){this.i=this.j=this.F=this.h};f.nd=function(){this.b=this.f++;this.i=this.j=this.h=this.a[this.b]};f.Ee=function(){this.i=this.j=this.w=this.h};f.xd=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.F=this.a[this.b]};
f.kd=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.h=this.a[this.b]};f.sd=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.w=this.a[this.b]};f.lc=function(){this.f+=(this.c&256?(this.D--,this.a[this.f]<<24>>24):0)+1};f.pd=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.F;this.i=this.j=this.h=this.a[this.b]};f.Bd=function(){this.b=this.a[this.f++]+this.w&255;this.i=this.j=this.F=this.a[this.b]};
f.rd=function(){this.b=this.a[this.f++]+this.w&255;this.i=this.j=this.h=this.a[this.b]};f.wd=function(){this.b=this.a[this.f++]+this.F&255;this.i=this.j=this.w=this.a[this.b]};f.yc=function(){this.A=this.v=0};f.md=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.i=this.j=this.h=this.a[this.b]};f.Ge=function(){this.i=this.j=this.w=this.G&255};f.yd=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.i=this.j=this.F=this.a[this.b]};
f.ld=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.i=this.j=this.h=this.a[this.b]};f.td=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.i=this.j=this.w=this.a[this.b]};f.Lc=function(){this.b=this.f++;this.i=this.j=this.c=this.F-this.a[this.b];this.c^=256};f.Dc=function(){this.b=this.a[this.f++]+this.w&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.i=this.j=this.c=this.h-this.a[this.b];this.c^=256};
f.Mc=function(){this.b=this.a[this.f++];this.i=this.j=this.c=this.F-this.a[this.b];this.c^=256};f.Fc=function(){this.b=this.a[this.f++];this.i=this.j=this.c=this.h-this.a[this.b];this.c^=256};f.Pc=function(){this.g=this.a[this.f++];this.i=this.j=this.a[this.g]=this.a[this.g]-1&255};f.fd=function(){this.i=this.j=this.F=this.F+1&255};f.Cc=function(){this.b=this.f++;this.i=this.j=this.c=this.h-this.a[this.b];this.c^=256};f.Rc=function(){this.i=this.j=this.w=this.w-1&255};
f.Kc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.c=this.F-this.a[this.b];this.c^=256};f.zc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.c=this.h-this.a[this.b];this.c^=256};f.Nc=function(){this.g=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.a[this.g]=this.a[this.g]-1&255};f.qc=function(){this.f+=(this.j&255?(this.D--,this.a[this.f]<<24>>24):0)+1};
f.Ec=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.F;this.i=this.j=this.c=this.h-this.a[this.b];this.c^=256};f.Gc=function(){this.b=this.a[this.f++]+this.w&255;this.i=this.j=this.c=this.h-this.a[this.b];this.c^=256};f.Qc=function(){this.g=this.a[this.f++]+this.w&255;this.i=this.j=this.a[this.g]=this.a[this.g]-1&255};f.wc=function(){Ua(this)};
f.Bc=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.i=this.j=this.c=this.h-this.a[this.b];this.c^=256};f.Ac=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.i=this.j=this.c=this.h-this.a[this.b];this.c^=256};f.Oc=function(){this.g=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.i=this.j=this.a[this.g]=this.a[this.g]-1&255};f.Ic=function(){this.b=this.f++;this.i=this.j=this.c=this.w-this.a[this.b];this.c^=256};
f.Ab=function(){this.b=this.a[this.f++]+this.w&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.c=this.h-this.a[this.b]-(this.c&256?0:1);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255;this.c^=256};f.je=function(){this.b=this.a[this.f++]+this.w&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.h=R(this,this.h,this.a[this.b])};f.Jc=function(){this.b=this.a[this.f++];this.i=this.j=this.c=this.w-this.a[this.b];this.c^=256};
f.Cb=function(){this.b=this.a[this.f++];this.c=this.h-this.a[this.b]-(this.c&256?0:1);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255;this.c^=256};f.le=function(){this.b=this.a[this.f++];this.h=R(this,this.h,this.a[this.b])};f.cd=function(){this.g=this.a[this.f++];this.i=this.j=this.a[this.g]=this.a[this.g]+1&255};f.ed=function(){this.i=this.j=this.w=this.w+1&255};
f.zb=function(){this.b=this.f++;this.c=this.h-this.a[this.b]-(this.c&256?0:1);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255;this.c^=256};f.ie=function(){this.b=this.f++;this.h=R(this,this.h,this.a[this.b])};f.Hd=function(){};f.Hc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.c=this.w-this.a[this.b];this.c^=256};
f.wb=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.h-this.a[this.b]-(this.c&256?0:1);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255;this.c^=256};f.fe=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=R(this,this.h,this.a[this.b])};f.ad=function(){this.g=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.a[this.g]=this.a[this.g]+1&255};f.mc=function(){this.f+=(this.j&255?0:(this.D--,this.a[this.f]<<24>>24))+1};
f.Bb=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.F;this.c=this.h-this.a[this.b]-(this.c&256?0:1);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255;this.c^=256};f.ke=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.F;this.h=R(this,this.h,this.a[this.b])};
f.Db=function(){this.b=this.a[this.f++]+this.w&255;this.c=this.h-this.a[this.b]-(this.c&256?0:1);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255;this.c^=256};f.me=function(){this.b=this.a[this.f++]+this.w&255;this.h=R(this,this.h,this.a[this.b])};f.dd=function(){this.g=this.a[this.f++]+this.w&255;this.i=this.j=this.a[this.g]=this.a[this.g]+1&255};f.oe=function(){Ta(this)};
f.yb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.c=this.h-this.a[this.b]-(this.c&256?0:1);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255;this.c^=256};f.he=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.h=R(this,this.h,this.a[this.b])};
f.xb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.c=this.h-this.a[this.b]-(this.c&256?0:1);this.A=this.h^this.a[this.b];this.v=this.c;this.i=this.j=this.h=this.c&255;this.c^=256};f.ge=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.h=R(this,this.h,this.a[this.b])};f.bd=function(){this.g=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.i=this.j=this.a[this.g]=this.a[this.g]+1&255};
f.De=function(){var a;a=this.a[this.f++];switch(a){case 0:this.l("HALT");this.aa();break;case 1:a=this.f;for(var b="";a<this.a.length;){var c=this.a[a++];if(!c)break;b+=String.fromCharCode(c)}this.f=a;b=b.replace(/%A/g,t(this.h,2)).replace(/%X/g,t(this.w,2)).replace(/%Y/g,t(this.F,2));this.l(b);Ra(this);break;default:this.f-=2,this.l("undefined opSim: "+u(a)+" at "+v(this.f)),this.aa()}};f.m=function(){var a=this.a[--this.f];this.l("undefined opcode: "+u(a)+" at "+v(this.f));this.aa()};
y(function(){for(var a=G(document,"c1pjs","cpu"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new Fa(d);F(d,c)}});function S(a){C.call(this,"C1PROM",a);this.b=this.a=null;this.g=a.size;if(this.o=a.image){a=this.o;var b=ia(this.o);"json"!=b&&"hex"!=b&&(a="http://"+(window?window.location.host:"www.pcjs.org")+"/api/v1/dump?file="+this.o+"&format=bytes");var c=this;w(a,function(a,b,g){Va(c,a,b,g)})}}p(S,C);
S.prototype.ca=function(a,b,c,d){this.a=a;this.v=b;a=c-b+1;this.g||(this.g=a);a!=this.g?Ca(this,"computer-specified ROM size ("+v(a)+") does not match component-specified size ("+v(this.g)+")"):(d&&(this.s=d,O(d,b,c,this,this.A)),Wa(this))};S.prototype.ia=function(a,b){a&&!this.C.N&&(this.C.N=!0,this.u=M(b,"debugger"))};S.prototype.A=function(a,b){void 0!==b&&(this.u&&T(this.u,this,a,b,this.u.lb,!0),a-=this.v,this.a[this.v+a]=this.b?this.b[a]:0)};
function Va(a,b,c,d){if(d)a.l('Error loading ROM "'+b+'" ('+d+")");else{if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),g=e.bytes;g?a.b=g:a.b=e}catch(h){a.l('Error processing ROM "'+b+'": '+h.message);return}else for(b=c.replace(/\n/gm," ").replace(/ +$/,"").split(" "),a.b=Array(b.length),c=0;c<b.length;c++)a.b[c]=parseInt(b[c],16);Wa(a)}}
function Wa(a){if(!H(a))if(!a.o)a.X();else if(a.b&&a.a){var b=a.b.length;if(b!=a.g)Ca(a,"ROM image size ("+v(b)+") does not match component-specified size ("+v(a.g)+")");else{for(var c=0;c<b;c++)a.a[a.v+c]=a.b[c];a.X()}}}y(function(){for(var a=G(document,"c1pjs","rom"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new S(d);F(d,c)}});function Xa(a){C.call(this,"C1PRAM",a)}p(Xa,C);Xa.prototype.ca=function(a){this.a=a;this.X()};
y(function(){for(var a=G(document,"c1pjs","ram"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new Xa(d);F(d,c)}});
function Ya(a){C.call(this,"C1PKeyboard",a);this.C.N=!1;this.Ha=a.model;this.$=8;this.Ya=10;this.Xa=13;this.ba=27;this.Ua=this.$;this.Va=this.Ya;this.Ia=this.Xa;this.Z=this.ba;this.K=241;this.W=224;this.Ka=3;this.La=15;this.I=1;this.D={};this.D["break"]=this.W;this.D.esc=this.Z;this.D["ctrl-c"]=this.Ka;this.D["ctrl-o"]=this.La;this.b=[];this.b[49]=30464;this.b[33]=30704;this.b[50]=30208;this.b[34]=30448;this.b[51]=29952;this.b[35]=30192;this.b[52]=29696;this.b[36]=29936;this.b[53]=29440;this.b[37]=
29680;this.b[54]=29184;this.b[38]=29424;this.b[55]=28928;this.b[39]=29168;this.b[56]=26368;this.b[40]=26608;this.b[57]=26112;this.b[41]=26352;this.b[48]=25856;this.b[58]=25600;this.b[42]=25840;this.b[45]=25344;this.b[61]=25584;this.b[46]=22272;this.b[62]=22512;this.b[108]=22016;this.b[76]=22256;this.b[92]=22256;this.b[111]=21760;this.b[79]=22E3;this.b[this.Ua]=22E3;this.b[this.Va]=21504;this.b[this.Ia]=21248;this.b[119]=18176;this.b[87]=18416;this.b[101]=17920;this.b[69]=18160;this.b[114]=17664;this.b[82]=
17904;this.b[116]=17408;this.b[84]=17648;this.b[121]=17152;this.b[89]=17392;this.b[117]=16896;this.b[85]=17136;this.b[105]=16640;this.b[73]=16880;this.b[115]=14080;this.b[83]=14320;this.b[100]=13824;this.b[68]=14064;this.b[102]=13568;this.b[70]=13808;this.b[103]=13312;this.b[71]=13552;this.b[104]=13056;this.b[72]=13296;this.b[106]=12800;this.b[74]=13040;this.b[107]=12544;this.b[75]=12784;this.b[91]=12784;this.b[120]=9984;this.b[88]=10224;this.b[99]=9728;this.b[67]=9968;this.b[118]=9472;this.b[86]=
9712;this.b[98]=9216;this.b[66]=9456;this.b[110]=8960;this.b[78]=9200;this.b[94]=9200;this.b[109]=8704;this.b[77]=8944;this.b[93]=8944;this.b[44]=8448;this.b[60]=8688;this.b[113]=5888;this.b[81]=6128;this.b[97]=5632;this.b[65]=5872;this.b[122]=5376;this.b[90]=5616;this.b[32]=5120;this.b[47]=4864;this.b[63]=5104;this.b[59]=4608;this.b[43]=4848;this.b[112]=4352;this.b[80]=4592;this.b[64]=4592;this.b[this.K]=1536;this.b[this.Z]=1280;this.b[240]=512;this.b[242]=256;this.b[244]=0;this.reset()}p(Ya,C);
f=Ya.prototype;f.reset=function(){this.Ma(this.Ha);this.g=this.I;this.ja=0;this.o=[this.I,0,0,0,0,0,0,0];this.L=[];if(this.v)for(var a in this.v)isNaN(+a)||this.v[a]&&clearTimeout(this.v[a]);this.v=[];this.sa=this.A=0;this.ka=-1;this.fa=this.o;this.qa=this.V=0;this.B=""};
f.T=function(a,b,c){if(void 0===this.H[b])switch(b){case "keyDown":return this.H[b]=c,c.onkeydown=function(a){return function(b){return Za(a,b,!0)}}(this),!0;case "keyPress":return this.H[b]=c,c.onkeypress=function(a){return function(b){var c=!0;b=b||window.event;b=b.which||b.keyCode;a.B="";a.g&8?a.g&=-9:c=!$a(a,b);a.u&&K(a.u,a.u.ya)&&a.u.message("keyPress("+u(b)+"): "+(c?"pass":"consume"));return c}}(this),!0;case "keyUp":return this.H[b]=c,c.onkeyup=function(a){return function(b){return Za(a,b,
!1)}}(this),!0;case "break":return this.H[b]=c,c.onclick=function(a){return function(){a.U&&a.U.reset(!0)}}(this),!0;default:if(void 0!==this.D[b])return this.H[b]=c,c.onclick=function(a,b,c){return function(){a.s&&a.s.da();return!$a(a,c)}}(this,b,this.D[b]),!0}return!1};f.ca=function(a,b,c,d){this.a=a;this.ra=b;this.Za=c-b+1;this.jb=this.ra+this.Za;d&&(this.s=d,O(d,b,c,this,this.Ib));this.X()};f.Ma=function(a){this.M=a;this.O=255;600!=this.M&&(this.O=0,this.l("updated keyboard model: "+this.M))};
f.ia=function(a,b){a&&!this.C.N&&(this.C.N=!0,this.U=b,this.u=M(b,"debugger"))};f.X=function(){this.R=(this.ib=x("iOS"))||x("Android");this.u&&K(this.u,this.u.ya)&&this.u.message("mobile keyboard support: "+(this.R?"true":"false")+" ("+window.navigator.userAgent+")");C.prototype.X.call(this)};function ab(a,b){b=b?100:250;a.s&&a.s.L&&(b/=a.s.L);return b}function bb(a,b){!a.A||void 0!==b&&b==a.A||(a.u&&K(a.u,a.u.ya)&&a.u.message("autoClear("+u(a.A)+")"),clearTimeout(a.v[a.A]),U(a,a.A,!1,4))}
function cb(a,b,c){a.B=b;db(a,c||300)}function db(a,b){if(0<a.B.length){var c=a.B.charCodeAt(0);10==c&&(c=13);65<=c&&90>=c&&(c+=32);a.B=a.B.substr(1);$a(a,c)}0<a.B.length&&setTimeout(function(a){return function(){db(a,b)}}(a),b)}
function Za(a,b,c){var d,e=!c;b=b.keyCode;c&&(a.sa=b);16==b?(a.g&=-5,c&&(a.g|=4),b+=224,e=!1):18==b?(a.g&=-3,c&&(a.g|=2),b+=224,e=!1):b==a.K-224?(a.g&=-65,c&&(a.g|=64),b+=224,e=!1):20==b?(c=!c,a.g&=~a.I,c&&(a.g|=a.I),b+=224,e=!1):91==b?(a.g&=-9,c&&(a.g|=8),e=!1,d=!0):d=9==b?e=!1:b==a.ba||b==a.$?c?!$a(a,b):!1:!0;e&&(a.g&=-9,a.R||b!=a.sa||bb(a));void 0===d&&(d=!U(a,b,c,2));a.u&&K(a.u,a.u.ya)&&a.u.message("key"+(c?"Down":"Up")+"("+u(b)+"): "+(d?"pass":"consume"));return d}
function $a(a,b){var c=!1;b==a.W?a.U&&(a.U.reset(!0),c=!0):(a.R&&65<=b&&90>=b&&(b+=32),bb(a,b),U(a,b,!0,0)&&(2==a.s.I?U(a,b,!1,1):(c=!1,a.v[b]&&(clearTimeout(a.v[b]),c=!0),c=ab(a,c),a.v[a.A=b]=setTimeout(function(a){return function(){U(a,b,!1,3)}}(a),c),a.u&&K(a.u,a.u.ya)&&a.u.message("keyPressSimulate("+u(b)+"): setTimeout()")),c=!0));a.u&&K(a.u,a.u.ya)&&a.u.message("keyPressSimulate("+u(b)+"): "+(c?"true":"false"));return c}
function U(a,b,c,d){var e=!1;c||(a.v[b]=null,a.A==b&&(a.A=0));var g=0,h=a.b[b];void 0===h&&(1<=b&&26>=b&&(b+=64,g=a.K),h=a.b[b]);void 0!==h&&(b=h>>12,e=h>>8&15,g||(g=h&255),c?(a.o[b]|=1<<e,a.o[0]=g==a.K?a.o[0]|64:240==g?a.o[0]|4:242==g?a.o[0]|2:a.o[0]&-71):(a.o[b]&=~(1<<e),a.o[0]&=-71,a.o[0]|=a.g&70),c=!d&&!a.L.length,a.L.push(a.o.slice()),eb(a,c),e=!0);return e}f.S=function(){};f.Ib=function(a){this.ja=this.s.S(a)^this.O;this.V++;eb(this,!1,a)};
function eb(a,b,c){var d=Sa(a.s);b||(2==a.s.I?b=void 0!==c&&32<=a.V:(b=d-a.qa,b=0>b||8192<=b));b&&(b=a.L.shift(),void 0!==b&&(a.fa=b),a.V=0,a.qa=d);for(b=d=0;8>b;b++)a.ja&1<<b&&(d|=a.fa[b]);d^=a.O;if(void 0!==c)a.a[c]=d;else if(c=a.ra,d!=a.ka)for(;c<a.jb;c++)a.a[c]=d;a.ka=d}y(function(){for(var a=G(document,"c1pjs","keyboard"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new Ya(d);F(d,c)}});
function fb(a,b,c,d){C.call(this,"C1PVideo",a);this.ja=a.model;this.$=a.charCols;this.ba=a.charRows;this.qa=a.screenWidth;this.ra=a.screenHeight;this.B=a.charWidth;this.D=a.charHeight;gb(this);this.A=b;this.O=c;this.o=d;var e;b=["","moz","ms","webkit"];a=a.smoothing;if(!ua){c={};if(window){e||(e=window.location.search.substr(1));for(var g=/\+/g,h=/([^&=]+)=?([^&]*)/g;d=h.exec(e);)c[decodeURIComponent(d[1].replace(g," "))]=decodeURIComponent(d[2].replace(g," "))}ua=c}(e=ua.smoothing)&&(a="true"==e);
if(null!=a)for(e=0;e<b.length;e++)if(c=(c=b[e])?c+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.O[c]){this.O[c]=a;break}}p(fb,C);f=fb.prototype;f.reset=function(a){this.Ma(this.ja);if(this.a)for(var b=this.K;b<this.R;b++)this.a[b]=a?Math.floor(256*Math.random()):32};f.T=function(a,b,c){switch(b){case "refresh":return this.H[b]=c,c.onclick=function(a){return function(){hb(a);Ha(a)}}(this),!0}return!1};
f.ca=function(a,b,c,d){this.a=a;this.K=b;this.ka=c-b+1;this.R=this.K+this.ka;d&&(this.s=d,Ia(d,56832,56832,this,this.S),O(d,56832,56832,this,this.Kb));this.reset(!0)};function gb(a,b,c,d,e){a.I=void 0!==b?b:a.$;a.sa=void 0!==c?c:a.ba;a.g=a.I*a.sa;a.R=a.K+a.g;a.Z=void 0!==d?d:0;a.fa=void 0!==e?e:c;a.V=Math.floor(a.qa/a.I);a.W=Math.floor(a.ra/a.fa)}f.da=function(){this.A.focus()};
f.Ma=function(a){this.M=a;600==this.M?(gb(this,this.$,this.ba,3,25),1024==this.g&&this.s&&(this.v=this.R+this.g-1,O(this.s,this.v,this.v,this,this.Gb))):(this.l("updated video model: "+this.M),gb(this,64,32));hb(this);Ha(this)};f.ia=function(a,b){if(a&&!this.C.N&&H(this)){if(this.C.N=!0,this.u=M(b,"debugger"),this.b=M(b,"keyboard"))this.b.T("canvas","keyDown",this.A),this.b.T("canvas","keyPress",this.A),this.b.T("canvas","keyUp",this.A)}else!a&&this.C.N&&(this.C.N=!1)};
f.X=function(){this.B||(this.B=Math.floor(this.o.width/16));this.D||(this.D=Math.floor(this.o.height/16));C.prototype.X.call(this)};f.S=function(a,b){var c=this.s.S(a);void 0!==b&&this.u&&T(this.u,this,a,b,this.u.$a);this.s.a[a]=c&127|(Math.floor(Sa(this.s)/8333)&1?128:0)};f.Kb=function(a,b){void 0!==b&&this.u&&T(this.u,this,a,b,this.u.$a)};
f.Gb=function(a,b){if(void 0!==b){this.u&&T(this.u,this,a,b,this.u.$a,!0);this.Ma(540);this.b&&this.b.Ma(542);a=this.s;b=a.K;var c=[],d=Ja(b,this.v,this.v,this,this.Gb);if(0<=d){c.push(b[d][0]);c.push(b[d][1]);b.splice(d,1);for(var e=65536,g=0,d=0;d<b.length;d++)e>b[d][0]&&(e=b[d][0]),g<b[d][1]&&(g=b[d][1]);c.push(e);c.push(g)}4==c.length&&(a.fa=c[2],a.ja=c[3])}};function hb(a){a.L=Array(a.g);for(var b=0;b<=a.g;b++)a.L[b]=-1}
function Ha(a){var b=0;if(a.C.N)for(;b<a.g;){var c=a.a[a.K+b];if(a.L[b]!=c){var d=Math.floor(b/a.I);if(d>=a.Z&&(d-=a.Z,d<a.fa)){var e=c*a.B;a.O.drawImage(a.o,e%a.o.width,Math.floor(e/a.o.width)*a.D,a.B,a.D,b%a.I*a.V,d*a.W,a.V,a.W)}a.L[b]=c}b++}}
y(function(){for(var a=G(document,"c1pjs","video"),b=0;b<a.length;b++){var c=a[b],d=E(c),e=document.createElement("canvas");if(!e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","c1pjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.setAttribute("contenteditable","true");e.setAttribute("autocapitalize","off");e.setAttribute("autocorrect","off");e.style.backgroundColor=d.screenColor;
e.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(e.style.height=(c.clientWidth*d.screenHeight/d.screenWidth|0)+"px",c.onresize=function(a,b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight));c.appendChild(e);var g=new Image,h=e.getContext("2d"),e=new fb(d,e,h,g);g.onload=function(a){return function(){a.X()}}(e,d.charSet);g.src=d.charSet;F(e,c)}});
function ib(a){C.call(this,"C1PSerialPort",a);this.C.N=!1;this.D=a.demo;this.reset(!0)}p(ib,C);f=ib.prototype;f.reset=function(a){if(a||this.o!=jb){this.v=-1;this.A=0;this.g="";if(this.D){a=1;if(this.nb){var b=this.nb.match(/\d+/);null!==b&&(a=parseInt(b[0],10))}this.g='10 PRINT "HELLO OSI #'+a+'"\n'}this.B=!0;this.o=kb}};f.start=function(){this.b&&this.D&&(cb(this.b," C\n\n",3E3),setTimeout(function(a){return function(){a.o=lb;cb(a.b,"LOAD\n")}}(this),12E3));this.D=!1};
f.T=function(a,b,c){var d=this;switch(b){case "listSerial":return this.H[b]=c,!0;case "loadSerial":return this.H[b]=c,c.onclick=function(){d.H.listSerial&&w(d.H.listSerial.value,function(a,b,c){mb(d,a,b,c)})},!0;case "mountSerial":return!x("Mobi")&&window&&"FileReader"in window?(this.H[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.onsubmit=function(a){var b=a.currentTarget[1].files[0],c=new FileReader;c.onload=function(){mb(d,
b.name,c.result.toString(),0)};c.readAsText(b);return!1}):c.parentNode.removeChild(c),!0}return!1};f.ca=function(a,b,c,d){this.a=a;this.M=b;this.K=c-b+1;this.I=this.M+this.K;if(this.s=d)Ia(d,b,c,this,this.S),O(d,b,c,this,this.Jb);this.X()};f.ia=function(a,b){a&&!this.C.N&&(this.C.N=!0,this.U=b,this.b=M(b,"keyboard"),this.u=M(b,"debugger"))};
function mb(a,b,c,d){if(c){a.A=0;a.g=c;a.B=!0;a.o=kb;if(-1!==b.indexOf(".json",b.length-5))try{d="";var e=eval("("+c+")").bytes;for(c=0;c<e.length;c++)d+=String.fromCharCode(e[c]);a.g=d;a.B=!1}catch(g){a.l('Error processing file "'+b+'": '+g.message);return}a.U&&a.b&&a.s.C.oa?(a.l("auto-loading "+b),a.s.da(),"."!=a.g.charAt(0)?(a.o=lb,cb(a.b,"NEW\nLOAD\n")):(a.o=jb,a.U.reset(!0),cb(a.b,"ML"))):a.l(b+" ready to load")}else a.l('Error loading file "'+b+'" ('+d+")")}
f.S=function(a,b){void 0!==b&&(a&1?nb(this):this.g&&!this.A&&nb(this))};f.Jb=function(a,b){void 0!==b&&this.u&&T(this.u,this,a,b,this.u.Ke,!0)};function nb(a){if(void 0!==a.g){a.v=-1;if(a.A<a.g.length){var b=a.g.charCodeAt(a.A++)&255;a.B&&10==b&&(b=13);a.v=b}else a.g="",a.A=0,a.o==lb&&a.b&&cb(a.b," \nRUN\n"),a.o=kb;for(b=a.M+0;b<a.I;b+=2)a.a[b]=0<=a.v?ob:pb;for(b=a.M+1;b<a.I;b+=2)a.a[b]=0<=a.v?a.v:0}}var pb=0,ob=1,kb=0,lb=1,jb=2;
y(function(){for(var a=G(document,"c1pjs","serial"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new ib(d);F(d,c)}});function qb(a){C.call(this,"C1PDiskController",a);this.C.N=!1;this.reset(!0)}p(qb,C);f=qb.prototype;f.reset=function(a){rb(this);this.b=-1;a&&(this.g=[],this.g[0]={Se:0,mb:40,Nb:!0,Ba:20,na:0,Aa:-1,Ra:[]})};
function rb(a){a.K={J:64,read:function(){},update:function(a){return function(b){void 0!==b&&(this.J=b);a.B.J&4||V(a,0,this)}}(a)};a.o={J:255,read:function(){this.update()},update:function(a){return function(b){void 0===b?b=a.o.J:sb(a,b,a.A.J);b=(b|190)&-2;if(0<=a.b&&a.g[a.b].Ra.length){var c=a.g[a.b];c.Nb&&(b&=-33);c.na||(b&=-3);10>=--c.Ba&&(0<c.Ba?(b&=-129,tb(a)):(c.Ba=100,0<=a.b&&(a.g[a.b].Aa=0,ub(a))))}this.J=b;a.B.J&4&&V(a,0,this)}}(a)};a.B={J:0,read:function(){},update:function(a){return function(b){void 0!==
b&&(this.J=b&-193);V(a,1,this);a.o.update();a.K.update()}}(a)};a.L={J:255,read:function(){},update:function(a){return function(b){void 0!==b&&(this.J=b);a.D.J&4||V(a,2,this)}}(a)};a.A={J:255,read:function(){},update:function(a){return function(b){void 0===b?b=a.A.J:sb(a,a.o.J,b);if(0<=a.b&&a.b<a.g.length){var c=a.g[a.b];c.Ra.length&&a.A.J&8&&!(b&8)&&(b&4?c.na--:c.na++,a.u&&K(a.u,a.u.Da)&&a.u.message("stepping "+(b&4?"down":"up")+" to track "+c.na),c.na>=c.mb&&(c.na=c.mb),0>c.na&&(c.na=0),c.Ba=20,
a.o.update(a.o.J|128),tb(a))}this.J=b;a.D.J&4&&V(a,2,this)}}(a)};a.D={J:0,read:function(){},update:function(a){return function(b){void 0!==b&&(this.J=b&-193);V(a,3,this);a.A.update();a.L.update()}}(a)};a.O={J:0,read:function(){},update:function(a){return function(b){void 0!==b&&(3==(b&3)&&(a.v.J=14),this.J=b);a.v.update()}}(a)};a.v={J:14,read:function(){},update:function(a){return function(b){void 0===b&&(b=a.v.J);b&=-2;0<=a.b&&0<=a.g[a.b].Aa&&(b|=1);this.J=b;V(a,16,this)}}(a)};a.I={J:0,read:function(a){return function(){ub(a)}}(a),
update:function(a){return function(b){void 0!==b&&(this.J=b);V(a,17,this)}}(a)};a.R={J:0,read:function(){},update:function(){return function(){}}(a)}}f.T=function(a,b,c){switch(b){case "listDisk":return this.H[b]=c,!0;case "loadDisk":return this.H[b]=c,c.onclick=function(a){return function(){if(a.H.listDisk){var b=a.H.listDisk.value,c=b;".json"!=b.substr(b.length-5)&&(c="http://"+window.location.host+"/api/v1/dump?disk="+b);a.l("loading "+ha(b)+"...");w(c,function(b,c,d){vb(a,b,c,d)})}}}(this),!0}return!1};
f.ca=function(a,b,c,d){this.a=a;this.M=b;if(this.s=d)Ia(d,b,c,this,this.S),O(d,b,c,this,this.Hb);this.X()};f.ia=function(a,b){a&&!this.C.N&&(this.C.N=!0,this.u=M(b,"debugger"))};
function vb(a,b,c,d){if(d)a.l("disk load error ("+d+")");else{d=[];a.l("mounting "+b+"...");try{if(d=eval("("+c+")"),d.length)if(d[0].length){var e=d[0];if(void 0===e[0].trackNum)a.l("data error: "+e[0]);else if(a.g[0]){for(c=0;c<e.length;c++){var g,h=e[c],l=h.sectors;if(void 0===(g=h.trackNum)||void 0===l)throw Error("track "+c+" missing data");g!=c&&A("track "+g+" out of order (expected "+c+")");d=[];var k,m,n;if(g){wb(d,h,"trackSig");xb(d,h);W(d,h,"trackType");for(var r=0;r<l.length;r++){k=l[r];
m=k.sectorData;W(d,k,"sectorSig");W(d,k,"sectorNum");W(d,k,"sectorPages");for(n=0;n<m.length;n++)d.push(m[n]);wb(d,k,"sectorEndSig")}}else for(k=l[0],m=k.sectorData,W(d,h,"trackLoad",2),W(d,k,"sectorPages"),n=0;n<m.length;n++)d.push(m[n]);e[g].Fb=d;a.u&&K(a.u,a.u.Da)&&a.u.message("track "+g+": "+d.length+" bytes")}a.g[0].Ra=e;a.l("mount of "+b+" complete")}else a.l("no available drives")}else a.l("no tracks: "+b);else a.l("no data: "+b)}catch(Qb){a.l("disk data error: "+Qb.message)}}}
function xb(a,b){b=b.trackNum;if(void 0===b)throw Error("missing bcd value: trackNum");a.push(Math.floor(b/10)<<4|b%10)}function W(a,b,c,d){b=b[c];if(void 0===b)throw Error("missing binary value: "+c);2==d&&a.push(b>>8&255);a.push(b&255)}function wb(a,b,c){b=b[c];if(void 0===b)throw Error("missing signature: "+c);for(c=0;c<b.length;c++)a.push(b.charCodeAt(c))}
function yb(a,b,c){b&=63;16>b?b&=3:32>b&&(b&=17);switch(b){case 0:a=a.B.J&4?a.o:a.K;break;case 1:a=a.B;break;case 2:a=a.D.J&4?a.A:a.L;break;case 3:a=a.D;break;case 16:a=c?a.O:a.v;break;case 17:a=a.I;break;default:a=a.R}return a}f.S=function(a,b){if(void 0!==b){var c=yb(this,a-this.M,!1);this.u&&T(this.u,this,a,b,this.u.Da,!1,c.Eb);c.read()}};
f.Hb=function(a,b){if(void 0!==b){var c=this.s.S(a),d=yb(this,a-this.M,!0);if(this.u&&K(this.u,this.u.Da|this.u.lb)&&(T(this.u,this,a,b,this.u.Da,!0,d.Eb),d.Lb))for(a=128,b=d.J^c;b&&a;)b&a&&this.u.message(" changed "+d.Eb+"."+d.Lb[a]+" to "+(c&a?"1":"0")),a>>=1;d.update(c)}};function sb(a,b,c){var d=-1;void 0!==b&&void 0!==c&&(d=0,c&32||(d|=2),a.o.J&64||(d|=1));a.b!=d&&(a.b=d,a.v.update())}function tb(a){0<=a.b&&(a.g[a.b].Aa=-1,a.I.update(255),a.v.update())}
function ub(a){var b;if(0<=a.b){b=a.g[a.b];var c=b.Ra[b.na];void 0!==c&&(0<=b.Aa&&b.Aa<c.Fb.length?(b.Ba=100,b=c.Fb[b.Aa++],a.I.update(b),a.v.update()):(b.Ba=10,tb(a)))}}function V(a,b,c){a.s.a[b+a.M]=c.J}y(function(){for(var a=G(document,"c1pjs","disk"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new qb(d);F(d,c)}});
function zb(a){C.call(this,"C1PDebugger",a);this.u=this;this.L=-1;this.ta=0;this.hb=null;this.Ta=!1;this.ha=0;this.pa=[];this.va=[];this.xa=[];this.Ja=0;this.wa=[];this.B=[];this.lb=1;this.ya=16;this.$a=32;this.Da=64;this.Ke=128;this.ma=this.Z=0;this.Qa={port:1,kbd:16,video:32,disk:64,serial:128};this.Oa=28;this.ab=56;this.Fa="ADC AND ASL BCC BCS BEQ BIT BMI BNE BPL BRK BVC BVS CLC CLD CLI CLV CMP CPX CPY DEC DEX DEY EOR INC INX INY JMP JSR LDA LDX LDY LSR NOP ORA PHA PHP PLA PLP ROL ROR RTI RTS SBC SEC SED SEI STA STX STY TAX TAY TSX TXA TXS TYA SIM .DB".split(" ");
this.W=["HLT","MSG"];Ab(this,!0);this.ga=[[10],[34,1,this.D],[this.ab,1],[],[],[34,1,this.b],[2,1,this.b],[],[36],[34,1,this.v],[2,0,this.O],[],[],[34,2,this.P],[2,2,this.P],[],[9,1,this.ea],[34,1,this.I],[],[],[],[34,1,this.g],[2,1,this.g],[],[13],[34,2,this.A],[],[],[],[34,2,this.o],[2,2,this.o],[],[this.Oa,2,this.Na],[1,1,this.D],[],[],[6,1,this.b],[1,1,this.b],[39,1,this.b],[],[38],[1,1,this.v],[39,0,this.O],[],[6,2,this.P],[1,2,this.P],[39,2,this.P],[],[7,1,this.ea],[1,1,this.I],[],[],[],[1,
1,this.g],[39,1,this.g],[],[44],[1,2,this.A],[],[],[],[1,2,this.o],[39,2,this.o],[],[41],[23,1,this.D],[],[],[],[23,1,this.b],[32,1,this.b],[],[35],[23,1,this.v],[32,0,this.O],[],[27,2,this.Na],[23,2,this.P],[32,2,this.P],[],[11,1,this.ea],[23,1,this.I],[],[],[],[23,1,this.g],[32,1,this.g],[],[15],[23,2,this.A],[],[],[],[23,2,this.o],[32,2,this.o],[],[42],[0,1,this.D],[],[],[],[0,1,this.b],[40,1,this.b],[],[37],[0,1,this.v],[40,0,this.O],[],[27,2,this.kb],[0,2,this.P],[40,2,this.P],[],[12,1,this.ea],
[0,1,this.I],[],[],[],[0,1,this.g],[40,1,this.g],[],[46],[0,2,this.A],[],[],[],[0,2,this.o],[40,2,this.o],[],[],[47,1,this.D],[],[],[49,1,this.b],[47,1,this.b],[48,1,this.b],[],[22],[],[53],[],[49,2,this.P],[47,2,this.P],[48,2,this.P],[],[3,1,this.ea],[47,1,this.I],[],[],[49,1,this.g],[47,1,this.g],[48,1,this.V],[],[55],[47,2,this.A],[54],[],[],[47,2,this.o],[],[],[31,1,this.v],[29,1,this.D],[30,1,this.v],[],[31,1,this.b],[29,1,this.b],[30,1,this.b],[],[51],[29,1,this.v],[50],[],[31,2,this.P],[29,
2,this.P],[30,2,this.P],[],[4,1,this.ea],[29,1,this.I],[],[],[31,1,this.g],[29,1,this.g],[30,1,this.V],[],[16],[29,2,this.A],[52],[],[31,2,this.o],[29,2,this.o],[30,2,this.A],[],[19,1,this.v],[17,1,this.D],[],[],[19,1,this.b],[17,1,this.b],[20,1,this.b],[],[26],[17,1,this.v],[21],[],[19,2,this.P],[17,2,this.P],[20,2,this.P],[],[8,1,this.ea],[17,1,this.I],[],[],[],[17,1,this.g],[20,1,this.g],[],[14],[17,2,this.A],[],[],[],[17,2,this.o],[20,2,this.o],[],[18,1,this.v],[43,1,this.D],[],[],[18,1,this.b],
[43,1,this.b],[24,1,this.b],[],[25],[43,1,this.v],[33],[],[18,2,this.P],[43,2,this.P],[24,2,this.P],[],[5,1,this.ea],[43,1,this.I],[],[],[],[43,1,this.g],[24,1,this.g],[],[45],[43,2,this.A],[],[],[],[43,2,this.o],[24,2,this.o],[]]}p(zb,C);f=zb.prototype;
f.T=function(a,b,c){var d=this;switch(b){case "debugInput":return this.R=this.H[b]=c,this.R.focus(),c.onkeypress=function(a,c){return function(d){13==d.keyCode&&(b=c.value,c.value="",Bb(a,b))}}(this,c),!0;case "debugEnter":return this.H[b]=c,na(c,function(){return d.R?(b=d.R.value,Bb(d,b),!0):!1}),!0;case "step":return this.H[b]=c,na(c,function(a){var b=!1;I(d,!0)||(J(d,!0),b=d.step(a?1:0),J(d,!1));return b}),!0}return!1};
f.ca=function(a,b,c){this.a=a;this.M=b;this.sa=c-b+1;this.Ca=this.M+this.sa;this.X()};f.ia=function(a,b){a&&!this.C.N&&(this.C.N=!0,this.s=M(b,"cpu"))};f.da=function(){this.R.focus()};
function Ab(a,b){a.O=0;a.v=1;a.o=2;a.A=3;a.Na=4;a.kb=5;a.g=6;a.V=7;a.D=8;a.I=9;a.P=10;a.b=11;a.ea=a.Na;var c="",d;if(b)for(a.la="A #$nn $nnnn,X $nnnn,Y $nnnn ($nnnn) $nn,X $nn,Y ($nn,X) ($nn),Y $nnnn $nn".split(" "),b=0;b<a.la.length;b++)d=a.la[b],c+="("+d.replace(/\(/g,"\\(").replace(/\)/g,"\\)").replace(/nnnn/g,"[0-9A-F][0-9A-F][0-9A-F][0-9A-F]?").replace(/nn/g,"[0-9A-F][0-9A-F]?").replace(/\$/g,"\\$")+"|)";else for(a.la="A nn [nnnn+X] [nnnn+Y] nnnn [nnnn] [nn+X] [nn+Y] [[nn+X]] [[nn]+Y] [nnnn] [nn]".split(" "),
b=0;b<a.la.length;b++)d=a.la[b],c+="("+d.replace(/\[/g,"\\[").replace(/]/g,"\\]").replace(/nnnn/g,"[0-9A-F][0-9A-F][0-9A-F][0-9A-F]?").replace(/nn/g,"[0-9A-F][0-9A-F]?").replace(/\+/g,"\\+")+"|)";a.Le=new RegExp(c);a.Mb=[27,a.Oa,9,7,11,12,3,4,8,5]}f.aa=function(){this.s.aa()};function T(a,b,c,d,e,g,h){(a.ma&e)==e&&(e=a.s.S(c),a.message(b.id+"."+(g?"setByte":"getByte")+"("+v(c)+")"+(void 0!==d?" @"+v(d):"")+": "+(h?h+"=":"")+u(e)))}f.message=function(a){this.l(a);Ra(this.s)};f.Ob=function(){this.l("Type ? for list of debugger commands\n")};
f.ua=function(){if(!Cb(this))return!1;this.s.ua();return!0};f.step=function(a){if(!Cb(this))return!1;var b;try{b=this.s.step(a)}catch(c){b=void 0,Ca(this.s,c.stack||c.message)}void 0!==b&&this.L++;this.s.update(!0);this.update(!0);return b};f.update=function(a){this.ta=this.s.f;a||this.za?Db(this):Eb(this)};function Cb(a){a.s&&H(a.s)&&!I(a.s)?(a=a.s,a.C.error?(a.l(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}
f.reset=function(){var a;this.wa.length||(this.wa=Array(1E3));for(a=0;a<this.wa.length;a++)this.wa[a]=-1;this.B.length||(this.B=Array(256));for(a=0;a<this.B.length;a++)this.B[a]=[a,0];this.L&&this.update();this.L=0};f.start=function(){this.za||this.l("running")};f.stop=function(a,b){if(!this.za&&(this.l("stopped"),b)){var c=la();this.l(c-a+"ms ("+b+" cycles)")}this.update();this.da();this.za||(this.L=0);Fb(this,this.s.f)};function Gb(a,b){return a+(b<<24>>24)}
f.S=function(a){var b;a>=this.M&&a<this.Ca&&(Ka(this.s,a),b=this.a[this.M+a],b&=255);return b};function Hb(a,b,c){b<a.M||b>=a.Ca?a.l("invalid address: "+v(b)):(a.a[a.M+b]=c&255,La(a.s,b),a.s.update())}function Ib(a,b){X(a.pa,b,void 0)||a.pa.push(b);return!0}function X(a,b,c){for(var d=!1,e=0;e<a.length;e++)if(a[e]==b){c&&a.splice(e,1);d=!0;break}return d}function Jb(a,b){void 0!==b&&(Fb(a,a.K),Ib(a,b)&&(a.K=b))}function Fb(a,b){void 0!==a.K&&b==a.K&&X(a.pa,a.K,!0)&&(a.K=void 0);a.za=!1}
function Qa(a,b,c,d){for(var e=!1,g=0;g<c.length;g++)if(c[g]==b){b!=a.K&&a.l("breakpoint hit: "+v(b)+" ("+d+")");e=!0;break}return e}
function Kb(a,b,c){var d=t(b,4),e=a.S(b++),g=void 0===e?0:e,h=a.ga[g],l=[],k=void 0===h[1]?0:h[1];do{d+=" "+t(g,2);if(!k--)break;g=a.S(b++);if(void 0===g)break;l.push(g)}while(1);void 0===h[0]&&(h=[57,1,a.v],l.push(e));var d=(d+" ").substr(0,15),d=d+a.Fa[h[0]],m=null;if(void 0!==h[2]){k=h[2];m=a.la[k];if(1==h[1]&&k==a.ea)m=m.replace(/nnnn/,t(Gb(b,g=l.pop()),4));else for(;l.length;)m=m.replace(/nn/,t(g=l.pop(),2));k==a.v&&1==h[1]&&32<=g&&128>g&&(m+=" ;'"+String.fromCharCode(g)+"'")}if(e==a.s.ab&&
(g<a.W.length&&(m=a.W[g]),g==a.s.Me)){k=0;for(m='"';g=a.S(b++);)16>k?m+=String.fromCharCode(g):16==k&&(m+="\u2026"),k++;m+='"'}m&&(d+=" "+m);c&&(d=(d+" ").substr(0,30),d+=";"+c.toString());a.$=b;return d}
function Y(a,b){var c=a.ta;if(void 0!==b){var d=16;"$"==b.charAt(0)?b=b.substr(1):"0x"==b.substr(0,2)?b=b.substr(2):"."==b.charAt(b.length-1)&&(d=10,b=b.substr(0,b.length-1));c=parseInt(b,d);isNaN(c)&&(a.l("invalid base-"+d+" address: "+b),c=void 0)}void 0!==c&&(c<a.M||c>=a.Ca)&&(a.l("address out of range: "+t(c)),c=void 0);return c}
function Lb(a,b){if("?"==b)a.l("\nfrequency commands:"),a.l("clear\tclear all frequency counts");else{var c=0;if(a.B)if("clear"==b){for(b=0;b<a.B.length;b++)a.B[b]=[b,0];a.l("frequency data cleared");c++}else if(void 0!==b)a.l("unknown frequency command: "+b),c++;else{var d=a.B.slice();d.sort(function(a,b){return b[1]-a[1]});for(b=0;b<d.length;b++){var e=d[b][0],g=d[b][1];g&&(a.l(a.Fa[a.ga[e][0]]+" ("+u(e)+"): "+g+" times"),c++)}}c||a.l("no frequency data available")}}
function Db(a,b,c,d){var e=Y(a,b);if(void 0!==e){void 0===d&&(d=1);b=a.Ca;if(void 0!==c){b=Y(a,c);if(void 0===b||b<e)return;if(256<b-e){a.l("range too large");return}b++;d=-1}for(e!=a.ta&&a.l();d--&&e<b;)c=Kb(a,e,I(a,!1)||a.za?a.L:0),a.l(c),a.ta=e=a.$}}
function Eb(a,b){if(b&&"?"==b[1])a.l("\nregister commands:"),a.l("r to display all"),a.l("r [target=value] to modify"),a.l("supported targets:"),a.l("A,X,Y,S,PC and flags C,Z,D,V,N");else{var c=!0;if(b&&1<b.length){var c=!1,d=b[1],e=d.indexOf("=");if(0<e)b=d.substr(e+1),d=d.substr(0,e);else if(2<b.length)b=b[2];else{a.l("missing value for "+b[1]);return}e=parseInt(b,16);if(isNaN(e)){a.l("invalid value: "+b);return}switch(d.toUpperCase()){case "A":a.s.h=e&255;break;case "X":a.s.w=e&255;break;case "Y":a.s.F=
e&255;break;case "C":a.s.c=e?256:0;break;case "Z":a.s.j=e?0:1;break;case "D":e?Ta(a.s):Ua(a.s);break;case "V":e?(d=a.s,d.v=0,d.A=128):(d=a.s,d.v=0,d.A=0);break;case "N":a.s.i=e?128:0;break;case "S":if(256!=(e&-256)){a.l("invalid stack pointer: "+b);return}a.s.G=e;break;case "PC":c=!0;a.s.f=e&65535;a.ta=a.s.f;break;default:a.l("unknown register: "+d);return}a.s.update()}a.l("A="+t(a.s.h,2)+" X="+t(a.s.w,2)+" Y="+t(a.s.F,2)+" P="+t(Oa(a.s),2)+" S="+t(a.s.G,4)+" PC="+t(a.s.f,4));c&&Db(a,t(a.ta=a.s.f,
4))}}function Mb(a,b){b=void 0===b?1:parseInt(b,10);var c=1==b?0:1;ma(b,function(a){return function(){return J(a,!0)&&a.step(c)}}(a),function(a){return function(){J(a,!1)}}(a))}
function Bb(a,b){b.length||(a.Ta?(a.l("ended assemble @"+t(a.ha,4)),a.ta=a.ha,a.Ta=!1):a.hb&&(b=a.hb));if(H(a)&&!I(a,!0)&&0<b.length){a.Ta?b="a "+t(a.ha,4)+" "+b:1<b.length&&1!=b.indexOf(" ")&&(b=b.charAt(0).toLowerCase()+" "+b.substr(1));var c=b.split(" ");a.hb=c[0];switch(c[0].toLowerCase()){case "a":var d=Y(a,c[1]);if(void 0!==d)if(a.ha=d,void 0===c[2])a.l("begin assemble @"+v(a.ha)),a.Ta=!0,a.s.update();else{var e;b=c[2];var g=c[3],c=a.ha,d=[];if(void 0!==b){var h;b=b.toUpperCase();"?"==b.charAt(b.length-
1)&&(g="?",b=b.substr(0,b.length-1));for(h=0;h<a.Fa.length&&b!=a.Fa[h];h++);h==a.Fa.length&&(a.l("unknown operation: "+b),h=-1);var l="",k;if(0<=h&&void 0!==g)if(l=g.toUpperCase(),"?"==l){for(g=k=0;g<a.ga.length;g++)a.ga[g][0]===h&&(k||a.l("supported opcodes:"),a.l(" "+t(g,2)+": "+b+(void 0!==a.ga[g][2]?" "+a.la[a.ga[g][2]]:"")),k++);h=-1}else if((k=l.match(a.Le))&&k[0]==l){for(g=1;g<k.length;g++)if(k[g]==l)if(void 0===e)e=g-1;else{a.l("too many operand matches (both "+a.la[e]+" and "+a.la[g-
1]+")");h=-1;break}e==a.Na&&0>a.Mb.indexOf(h)&&(e=a.P);e==a.kb&&27!=h&&(e=a.P)}else a.l("unknown operand: "+l),h=-1;if(0<=h){k=-1;for(g=0;g<a.ga.length;g++)if(a.ga[g][0]===h&&a.ga[g][2]===e)if(0>k)k=g;else{a.l("too many instruction matches (both "+u(k)+" and "+u(g)+")");k=-2;break}if(0<=k){if(d.push(k),void 0!==e)if(b=a.ga[k][1],l=l.match(/[0-9A-F]+/))for(l=parseInt(l[0],16),1==b&&e==a.ea&&(l-=c+2,-128>l||127<l)&&(a.l("branch out of range ("+l+")"),d=[],b=0),g=0;g<b;g++)d.push(l&255),l>>>=8;else b&&
a.l("instruction missing "+b+" bytes")}else a.l("unknown instruction: "+b+" "+l+"")}}e=d;if(e.length){for(c=0;c<e.length;c++)Hb(a,a.ha+c,e[c]);a.l(Kb(a,a.ha));a.ha+=e.length}}break;case "b":e=c[1];c=c[2];if(void 0===e||"?"==e)a.l("\nbreakpoint commands:"),a.l("bp [a]\tset exec breakpoint at [a]"),a.l("br [a]\tset read breakpoint at [a]"),a.l("bw [a]\tset write breakpoint at [a]"),a.l("bc [a]\tclear breakpoint at [a]"),a.l("bl\tlist all breakpoints");else if(void 0===c&&1<e.length&&(c=e.substr(1),
e=e.substr(0,1)),"l"==e){e=0;d=a.pa;for(c=0;c<d.length;c++)a.l("breakpoint enabled: "+v(d[c])+" (exec)"),e++;d=a.va;for(c=0;c<d.length;c++)a.l("breakpoint enabled: "+v(d[c])+" (read)"),e++;d=a.xa;for(c=0;c<d.length;c++)a.l("breakpoint enabled: "+v(d[c])+" (write)"),e++;e||a.l("no breakpoints")}else void 0===c?a.l("missing breakpoint address"):"c"==e&&"*"==c?(a.pa=[],a.va=[],a.xa=[],a.l("all breakpoints cleared")):(c=Y(a,c),void 0!==c&&("p"==e?Ib(a,c)?a.l("breakpoint enabled: "+v(c)+" (exec)"):a.l("breakpoint not set: "+
v(c)):"c"==e?X(a.pa,c,!0)?a.l("breakpoint cleared: "+v(c)+" (exec)"):X(a.va,c,!0)?a.l("breakpoint cleared: "+v(c)+" (read)"):X(a.xa,c,!0)?a.l("breakpoint cleared: "+v(c)+" (write)"):a.l("breakpoint missing: "+v(c)):"r"==e?(X(a.va,c,void 0)||a.va.push(c),a.l("breakpoint enabled: "+v(c)+" (read)")):"w"==e?(X(a.xa,c,void 0)||a.xa.push(c),a.l("breakpoint enabled: "+v(c)+" (write)")):a.l("unknown breakpoint command: "+e)));break;case "d":e=c[1];d=c[2];if("?"==e)a.l("\ndump commands:"),a.l("d [a] [#] dump # lines of memory");
else if(e=Y(a,e),void 0!==e){c=0;void 0!==d&&("l"==d.charAt(0)&&(d=d.substr(1)),c=parseInt(d,10));c||(c=1);for(d=0;d<c;d++){l=b="";g=e;for(h=0;8>h&&e<a.Ca;h++)k=a.S(e),void 0===k&&(k=0),b+=t(k,2)+" ",l+=32<=k&&128>k?String.fromCharCode(k):".",e++;a.l(t(g,4)+" "+b+l)}a.ta=e}break;case "e":e=c[1];if(void 0===e)a.l("missing address");else if(e=Y(a,e),void 0!==e)for(d=2;d<c.length;d++)b=parseInt(c[d],16),Hb(a,e++,b);break;case "f":Lb(a,c[1]);break;case "g":e=c[1];void 0!==e&&Jb(a,Y(a,e));a.ua()||a.s.da();
break;case "h":a.aa();break;case "o":if(void 0===c[1]||"?"==c[1])a.l("\noption commands:"),a.l("max\trun at maximum speed"),a.l("fast\trun faster (up to "+a.s.Ea+"Mhz)"),a.l("slow\trun at normal speed (1Mhz)"),a.l("classic\tuse classic operand syntax"),a.l("modern\tuse modern operand syntax"),a.l("msg\tenable message categories");else switch(e=c[1],e){case "slow":N(a.s,a.s.Pa);break;case "fast":N(a.s,a.s.Ne);break;case "max":N(a.s,a.s.Oe);break;case "classic":Ab(a,!0);a.l("classic syntax enabled");
break;case "modern":Ab(a,!1);a.l("modern syntax enabled");break;case "msg":e=0;void 0!==c[2]&&("all"==c[2]?e=255:void 0!==a.Qa[c[2]]&&(e=a.Qa[c[2]]),e&&("on"==c[3]?a.ma|=e:"off"==c[3]&&(a.ma&=~e)));for(d in a.Qa)if(void 0===c[2]||"all"==c[2]||c[2]==d)e=a.Qa[d],a.l(d+" messages: "+(a.ma&e?"on":"off"));break;default:a.l("unknown option: "+e)}break;case "p":l=c[1];e=10;c=a.Ja;if(d=a.wa){b=void 0===l?a.Pb:parseInt(l,10);void 0===b&&(b=10);b>d.length&&(a.l("note: only "+d.length+" available"),b=d.length);
void 0!==l&&(a.gb=0,a.l(b+" instructions earlier:"));l=a.gb?a.gb:1;c-=b;for(0>c&&(c=d.length-1);e&&c!=a.Ja;){g=d[c];if(0>g)break;a.l(Kb(a,g,l++));++c==d.length&&(c=0);e--;b--}a.Pb=b;a.gb=l}10==e&&a.l("no history available");break;case "r":Eb(a,c);break;case "s":a.S(a.s.f)==a.s.Oa?(Jb(a,a.s.f+3),a.za=!0,a.ua()||a.s.da()):Mb(a);break;case "t":Mb(a,c[1]);break;case "u":Db(a,c[1],c[2],8);break;case "?":case "help":a.l("\ncommands:\n?\thelp\na [#]\tassemble\nb [#]\tbreakpoint\nd [#]\tdump memory\ne [#]\tedit memory\nf\tdump frequencies\ng [#]\trun to [#]\nh\thalt\no\toptions\np [#]\tdump history\nr\tdump/edit registers\ns\tstep over instruction\nt [#]\tstep instruction(s)\nu [#]\tunassemble");
a.l("note: frequency and history commands operate only when breakpoints are set");break;default:a.l("unknown command: "+b)}}}y(function(){for(var a=G(document,"c1pjs","debugger"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new zb(d);F(d,c)}});function Z(a,b){C.call(this,"C1PComputer",a);this.Y=b}p(Z,C);Z.prototype.reset=function(a){var b=null,c;for(c in this.Y)for(var d=0;d<this.Y[c].length;d++){var e=this.Y[c][d];e&&e.reset&&(e.reset(),"cpu"==c&&(b=e))}b&&(b.update(),a&&b.ua())};
Z.prototype.start=function(){for(var a in this.Y)if("cpu"!=a)for(var b=0;b<this.Y[a].length;b++){var c=this.Y[a][b];c&&c.start&&c.start()}};Z.prototype.stop=function(a,b){for(var c in this.Y)if("cpu"!=c)for(var d=0;d<this.Y[c].length;d++){var e=this.Y[c][d];e&&e.stop&&e.stop(a,b)}};Z.prototype.T=function(a,b,c){switch(b){case "reset":return this.H[b]=c,c.onclick=function(a){return function(){a.reset()}}(this),!0}return!1};function M(a,b){return a.Y[b]?a.Y[b][0]:null}
function Nb(a){var b=null,c;for(c in a.Y)for(var d=0;d<a.Y[c].length;d++){var e=a.Y[c][d];if(e){if(!H(e)){H(e,function(a){return function(){Nb(a)}}(a));return}"cpu"==c?b=e:e.ia&&e.ia(!0,a)}}a.X();a.l("C1Pjs v1.34.1\nCopyright \u00a9 2012-2017 Jeff Parsons <Jeff@pcjs.org>");b&&b.ia(!0,a)}
y(function(){for(var a=G(document,"c1pjs","computer"),b=0;b<a.length;b++){for(var c=a[b],d=E(c),e,g={},h,l=0,k=0,m=0;m<d.modules.length;m++){var n=d.modules[m];if(!m){if("cpu"!=n.type)break;l=n.start;k=n.end;h=Array(k+1-l);for(e=l;e<h.length;e++)h[e]=0}if(e=va(n.refID,d.id)){var r=n.type;void 0===g[r]&&(g[r]=[]);g[r].push(e);e.ca&&void 0!==n.start&&e.ca(h,n.start,n.end,g.cpu[0])}else{A('no component for <module refid="'+n.refID+'">');return}}if(!h){A('<module type="cpu"> definition must appear first in the <computer> specification');
break}if(e=va("debugger",d.id))g["debugger"]=[e],e.ca&&e.ca(h,l,k,g.cpu[0]);l=new Z(d,g);if(k=va("panel",d.id))if(g.panel=[k],k.Sa){e=d.id;d=void 0;g=[];e&&(e=0<(d=e.indexOf("."))?e.substr(0,d+1):"");for(d=0;d<D.length;d++)m=D[d],e&&m.id.indexOf(e)||g.push(m);d=g;for(g=0;g<d.length;g++)e=d[g],e!=k&&(e.Wa=k.Wa,e.l=k.l,e.Sa=k.Sa)}F(l,c);Nb(l)}});var Ob=0;function Pb(a,b,c,d,e,g){e("Loading "+a+"...");w(a,function(h,l,k){k?(l||(l="unable to load "+a+" ("+k+")"),g(l,null)):Rb(l,a,b,c,d,e,g)})}
function Rb(a,b,c,d,e,g,h){function l(a,g){if(g)h(g,null);else{c&&(L[c]&&b&&(L[c][b]=a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{",d+='url:"'+g+'"}',"object"==typeof resources&&(g=null),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':"")));e||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,
"$1C1Pjs$2"),a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1c1pjs$2"));g=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(n){g=null,a=n.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?Sb(a,g,l):l(a,null):h("no data"+(b?" for file: "+
b:""),null)}
function Sb(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");w(e,function(g,h,l){if(l||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+l+")");else{if(g=d[3])if(l=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=l[0],m,n=/( [a-z]+=)(['"])(.*?)\2/g;m=n.exec(g);)k=0>k.indexOf(m[1])?k.replace(">",m[0]+">"):k.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);l[0]!=k&&(h=h.replace(l[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,"");
a=a.replace(d[0],h);Sb(a,b,c)}})}else c(a,null)}
function Tb(a,b,c){function d(a){if(void 0===h){var b=g&&G(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ja(a))}function e(a){d("Error: "+a);l&&(--Ob||B(!0));l=!1}var g,h,l=!0;Ob++;L[a]={};try{if(g=document.getElementById(a)){var k;if("object"==typeof resources&&(k=resources.css)){var m=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css";n.styleSheet?n.styleSheet.cssText=k:n.appendChild(document.createTextNode(k));m.appendChild(n)}c||(c=
"/versions/c1pjs/1.34.1/components.xsl");k=function(h,k){k?Pb(c,null,null,!1,d,function(h,l){l?(L[a]&&c&&(L[a][c]=h),d("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window?(l=k.transformNode(l))?(g.outerHTML=l,--Ob||B(!0)):e("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(h=new XSLTProcessor,h.importStylesheet(l),(l=h.transformToFragment(k,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--Ob||B(!0)):e("invalid machine element: "+
a):e("transformToFragment failed")):e("unable to transform XML: unsupported browser")):e(h)}):e(h)};"<"!=b.charAt(0)?Pb(b,a,void 0,!0,d,k):Rb(b,null,a,void 0,!1,d,k)}else e("missing machine element: "+a)}catch(r){e(r.message)}return l}window.embedC1P=function(a,b,c){B(!1);return Tb(a,b,c)};window.findMachineComponent=function(a,b){return wa(b,a+".machine")};
window.processMachineScript=function(a,b){var c=!1;a+=".machine";if("string"==typeof b&&!ya[a]){for(var c=!0,d=ya,e=a,g=b.length,h=[],l=[],k="",m=null,n=0;n<g;n++){var r=b[n];if('"'==r||"'"==r)m&&r!=m?k+=r:(m?m=null:m=r,k&&(l.push(k),k=""));else{if(!m){if("\r"==r||"\n"==r)r=";";if(" "==r||"\t"==r||";"==r){k&&(l.push(k),k="");";"==r&&l.length&&(h.push(l),l=[]);continue}}k+=r}}k&&l.push(k);l.length&&h.push(l);d[e]=h;xa(a)||(c=!1)}return c};window.enableEvents=B;window.sendEvent=sa;})();

View file

@ -0,0 +1,157 @@
(function(){/*
http://pcjs.org/modules/shared/lib/dumpapi.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/reportapi.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/strlib.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/weblib.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/embed.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/defines.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/usrlib.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/shared/lib/component.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/defines.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/panel.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/cpu.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/rom.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/ram.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/keyboard.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/video.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/serial.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/disk.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/debugger.js (C) Jeff Parsons 2012-2017
http://pcjs.org/modules/c1pjs/lib/computer.js (C) Jeff Parsons 2012-2017
*/
var e;function q(a,b){function c(){}c.prototype=b.prototype;a.prototype=new c;a.prototype.constructor=a;for(var d in b)if(Object.defineProperties){var f=Object.getOwnPropertyDescriptor(b,d);f&&Object.defineProperty(a,d,f)}else a[d]=b[d]}
for(var aa="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},r="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global?global:this,t=["Math","trunc"],ba=0;ba<t.length-1;ba++){var ca=t[ba];ca in r||(r[ca]={});r=r[ca]}
var da=t[t.length-1],ea=r[da],fa=ea?ea:function(a){a=Number(a);if(isNaN(a)||Infinity===a||-Infinity===a||!a)return a;var b=Math.floor(Math.abs(a));return 0>a?-b:b};fa!=ea&&null!=fa&&aa(r,da,{configurable:!0,writable:!0,value:fa});function u(a,b,c){b?9<b&&(b=9):b=a&-65536?8:4;c=c?"0x":"";var d="";if(null==a||isNaN(a))for(;0<b--;)d="?"+d;else for(0>a&&-1<a&&(a=-1);0<b--;){var f=a%16,f=f+(0<=f&&9>=f?48:55),d=String.fromCharCode(f)+d;a=Math.trunc(a/16)}return(void 0===c?"":c)+d}
function ga(a){var b=a,c=a.lastIndexOf("/");0<=c&&(b=a.substr(c+1));c=b.indexOf("&");0<c&&(b=b.substr(0,c));return b}function ha(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function ia(a){return a.replace(/[&<>"']/g,function(a){return ja[a]})}var ja={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"},ka=Date.now||function(){return+new Date};
function v(a,b){var c=!0,c=void 0===c?!1:c,d=0,f=null;if("object"==typeof resources&&(f=resources[a]))b&&b(a,f,d);else if(c&&"function"==typeof resources)resources(a,function(c,d){b&&b(a,c,d)});else{var g=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(g.onreadystatechange=function(){4===g.readyState&&(f=g.responseText,200==g.status||!g.status&&f.length&&"file:"==(window?window.location.protocol:"file:")||(d=g.status||-1),b&&b(a,f,d))});g.open("GET",
a,c);g.send();c||(f=g.responseText,200!=g.status&&(d=g.status||-1),b&&b(a,f,d))}}function w(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}function la(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function x(a){y.init.push(a)}
function z(a){if(A)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){B(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function C(a){!A&&a?(A=!0,ma&&na("init"),oa&&na("show")):A=a}function na(a){y[a]&&z(y[a])}var pa=null,y={init:[],show:[],exit:[]},ma=!1,oa=!1,A=!0;la("onload",function(){ma=!0;z(y.init)});la("onpageshow",function(){oa=!0;z(y.show)});la(w("Opera")||w("iOS")?"onunload":"onbeforeunload",function(){z(y.exit)});
function D(a,b){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.exports={};this.B=this.bindings={};a=this.id.indexOf(".");0>a?this.va=this.id:(this.Ba=this.id.substr(0,a),this.va=this.id.substr(a+1));this.u={ready:!1,ra:!1,wa:!1,I:!1,error:!1};this.ua=null;this.u.error=!1;this.G=this.J=this.sa=null;E.push(this)}function B(a){window&&window.alert(a)}
function F(a,b){if(void 0!==a){var c;b&&0<(c=b.indexOf("."))&&(a=b.substr(0,c+1)+a);for(c=0;c<E.length;c++)if(E[c].id===a)return E[c]}return null}function qa(a,b){var c;if(void 0!==a){var d;b&&(b=0<(d=b.indexOf("."))?b.substr(0,d+1):"");for(d=0;d<E.length;d++)if(c)c==E[d]&&(c=null);else if(!(a!=E[d].type||b&&E[d].id.indexOf(b)))return E[d]}return null}function G(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){B(c.message+" ("+a+")")}return b}
function H(a,b){b=I(b.parentNode,"c1pjs-control");for(var c=0;c<b.length;c++)for(var d=b[c].childNodes,f=0;f<d.length;f++){var g=d[f];if(1===g.nodeType){var h=g.getAttribute("class");if(h)for(var l=h.split(" "),k=0;k<l.length;k++)switch(h=l[k],h){case "c1pjs-binding":(h=G(g))&&h.binding&&a.L(h.type,h.binding,g,h.value),k=l.length}}}}
function I(a,b,c){c&&(b+="-"+c+"-object");if(a.getElementsByClassName)return a.getElementsByClassName(b);var d;c=[];a=a.getElementsByTagName("*");var f=new RegExp("(^| )"+b+"( |$)");b=0;for(d=a.length;b<d;b++)f.test(a[b].className)&&c.push(a[b]);return c}
function ra(a){for(var b=!0,c=J[a];c&&c.length;){var d=c.splice(0,1)[0],f=d[0],g=null;0<=sa.indexOf(f)&&(g=function(){return function(){ra(a)}}());var h=ta[f];if(h)if(!g)b=h(d[1],d[2],d[3]);else{if(!h(g,d[1],d[2],d[3]))break}else{var b=!1,l=qa(d[1],a);if(l)if(h=ua[f])b=h(l,d[2],d[3]);else{var k=l.exports;if(k&&(h=k[f]))if(b=!0,!g)b=h.call(l,d[2],d[3]);else if(!h.call(l,g,d[2],d[3]))break}}if(!b){B("Script error: "+f+(h?" failed":" unrecognized"));break}}c&&!c.length&&delete J[a];return b}e=D.prototype;
e.toString=function(){return this.name?this.name:this.id||this.type};
e.L=function(a,b,c){switch(b){case "clear":return this.B[b]||(this.B[b]=c,c.onclick=function(a){return function(){a.B.print&&(a.B.print.value="")}}(this)),!0;case "print":return this.B[b]||(this.sa=this.B[b]=c,c.value="",this.F=function(a){return function(b,c){8192<a.value.length&&(a.value=a.value.substr(a.value.length-4096));a.value+=(void 0!==c?c+": ":"")+(b||"")+"\n";a.scrollTop=a.scrollHeight}}(c),this.ta=function(a){this.F(a,this.va)}),!0;default:return!1}};e.log=function(){};e.F=function(){};
e.status=function(a){this.F(this.va+": "+a)};e.ta=function(a,b,c){c=c||this.type;b||B((c?c+": ":"")+a)};function va(a,b){a.u.error=!0;a.ta(b)}function K(a,b){b&&(a.u.ready?b():a.ua=b);return a.u.ready}e.R=function(a){this.u.error||(this.u.ready=!1!==a,this.u.ready&&(a=this.ua,this.ua=null,a&&a()))};function wa(a,b){if(a.u.wa)return a.u.ra=!1,a.u.wa=!1;if(a.u.error)return a.F(a.toString()+" error"),!1;a.u.ra=b;return a.u.ra}
window&&(window.PCjs||(window.PCjs={}),window.PCjs.Machines||(window.PCjs.Machines={}),window.PCjs.Components||(window.PCjs.Components=[]),window.PCjs.Commands||(window.PCjs.Commands={}));
var L=window?window.PCjs.Machines:{},E=window?window.PCjs.Components:[],J=window?window.PCjs.Commands:{},sa=["hold","sleep","wait"],ta={alert:function(a){B(a);return!0},sleep:function(a,b){setTimeout(a,+b);return!1}},ua={select:function(a,b,c){var d=!1;if(a=a.bindings[b])for(b=0;b<a.options.length;b++)if(a.options[b].textContent==c){a.selectedIndex!=b&&(a.selectedIndex=b);d=!0;break}return d}};
Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){b=b||0;for(var c=this.length;b<c;b++)if(this[b]===a)return b;return-1});Array.isArray||(Array.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)});
Function.prototype.bind||(Function.prototype.bind=function(a){function b(){return f.apply(this instanceof c&&a?this:a,d.concat(Array.prototype.slice.call(arguments)))}function c(){}if("function"!=typeof this)throw new TypeError("Function.prototype.bind: non-callable object");var d=Array.prototype.slice.call(arguments,1),f=this;c.prototype=this.prototype;b.prototype=new c;return b});function M(a){D.call(this,"C1PPanel",a);this.u.I=!1}q(M,D);
M.prototype.L=function(a,b,c,d){return this.J&&this.J.L(a,b,c,d)||this.G&&this.G.L(a,b,c,d)||this.b&&this.b.L(a,b,c,d)?!0:D.prototype.L.call(this,a,b,c,d)};M.prototype.$=function(a,b){a&&!this.u.I&&(this.u.I=!0,this.J=b,this.G=N(b,"cpu"),this.b=N(b,"keyboard"),xa())};function xa(){for(var a=!1,b=I(document,"c1pjs","panel"),c=0;c<b.length;c++){var d=b[c],f=G(d),g=F(f.id);g||(a=!0,g=new M(f));H(g,d);a&&g.R()}}x(xa);
function ya(a){D.call(this,"C1PCPU",a);za(this);this.u.I=!1;this.u.Z=!1;this.Aa=a.autoStart;this.K=this.ka=0;this.xa=30;this.oa=5;this.fa=8;this.za=["Slow","Fast","Max"];this.fb=["(1Mhz)","(up to "+this.fa+"Mhz)","(unlimited)"];this.S=[];this.M=[];this.la=65536;this.ma=0;this.da=65536;this.ea=0;this.v=[this.Lb,this.dd,this.Wd,this.l,this.l,this.fd,this.Bb,this.l,this.jd,this.cd,this.Ab,this.l,this.l,this.$c,this.yb,this.l,this.Kb,this.ed,this.l,this.l,this.l,this.gd,this.Cb,this.l,this.Ob,this.bd,
this.l,this.l,this.l,this.ad,this.zb,this.l,this.Bc,this.ub,this.l,this.l,this.Hb,this.wb,this.pd,this.l,this.ld,this.tb,this.od,this.l,this.Gb,this.qb,this.md,this.l,this.Ib,this.vb,this.l,this.l,this.l,this.xb,this.qd,this.l,this.Gd,this.sb,this.l,this.l,this.l,this.rb,this.nd,this.l,this.wd,this.pc,this.l,this.l,this.l,this.rc,this.Xc,this.l,this.hd,this.oc,this.Wc,this.l,this.Ac,this.lc,this.Uc,this.l,this.Mb,this.qc,this.l,this.l,this.l,this.sc,this.Yc,this.l,this.Qb,this.nc,this.l,this.l,this.l,
this.mc,this.Vc,this.l,this.xd,this.La,this.l,this.l,this.l,this.Na,this.ud,this.l,this.kd,this.Ka,this.td,this.l,this.zc,this.Ha,this.rd,this.l,this.Nb,this.Ma,this.l,this.l,this.l,this.Oa,this.vd,this.l,this.Id,this.Ja,this.l,this.l,this.l,this.Ia,this.sd,this.l,this.l,this.Md,this.l,this.l,this.Ud,this.Od,this.Rd,this.l,this.kc,this.l,this.$d,this.l,this.Td,this.Jd,this.Qd,this.l,this.Db,this.Nd,this.l,this.l,this.Vd,this.Pd,this.Sd,this.l,this.be,this.Ld,this.ae,this.l,this.l,this.Kd,this.l,this.l,
this.Rc,this.Gc,this.Mc,this.l,this.Sc,this.Ic,this.Nc,this.l,this.Yd,this.Fc,this.Xd,this.l,this.Pc,this.Cc,this.Kc,this.l,this.Eb,this.Hc,this.l,this.l,this.Tc,this.Jc,this.Oc,this.l,this.Rb,this.Ec,this.Zd,this.l,this.Qc,this.Dc,this.Lc,this.l,this.dc,this.Wb,this.l,this.l,this.ec,this.Yb,this.hc,this.l,this.yc,this.Vb,this.jc,this.l,this.cc,this.Sb,this.fc,this.l,this.Jb,this.Xb,this.l,this.l,this.l,this.Zb,this.ic,this.l,this.Pb,this.Ub,this.l,this.l,this.l,this.Tb,this.gc,this.l,this.ac,this.Ta,
this.l,this.l,this.bc,this.Va,this.vc,this.l,this.xc,this.Sa,this.Zc,this.l,this.$b,this.Pa,this.tc,this.l,this.Fb,this.Ua,this.l,this.l,this.l,this.Wa,this.wc,this.l,this.Hd,this.Ra,this.l,this.l,this.l,this.Qa,this.uc,this.l];this.eb=[7,6,0,0,0,3,5,0,3,2,2,0,0,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,3,6,0,0,3,3,5,0,4,2,2,0,4,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,6,6,0,0,0,3,5,0,3,2,2,0,3,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,6,6,0,0,0,3,5,0,4,2,2,0,5,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,0,6,0,0,
3,3,3,0,2,0,2,0,4,4,4,0,2,5,0,0,4,4,4,0,2,4,2,0,0,4,0,0,2,6,2,0,3,3,3,0,2,2,2,0,4,4,4,0,2,5,0,0,4,4,4,0,2,4,2,0,4,4,4,0,2,6,0,0,3,3,5,0,2,2,2,0,4,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0,2,6,0,0,3,3,5,0,2,2,2,0,4,4,6,0,2,5,0,0,0,4,6,0,2,4,0,0,0,4,7,0]}q(ya,D);e=ya.prototype;e.reset=function(a){this.u.Z&&O(this);za(this);this.f=this.a[65532]|this.a[65533]<<8;this.u.error=!1;a&&(!0===this.Aa||null===this.Aa&&void 0===this.B.run)&&P(this)};
e.L=function(a,b,c){a=!1;switch(b){case "run":this.B[b]=c;c.onclick=function(a){return function(){a.u.Z?O(a):P(a)}}(this);a=!0;break;case "A":case "X":case "Y":case "S":case "PC":case "C":case "Z":case "I":case "D":case "B":case "V":case "N":case "speed":this.B[b]=c;a=!0;break;case "setSpeed":this.B[b]=c,c.onclick=function(a){return function(){Aa(a,2<=a.K?a.ka:a.K+1,!0)}}(this),a=!0}return a};e.Y=function(a,b){this.a=a;(this.Fa=b)?B("unsupported CPU address buffer offset ("+this.Fa+")"):this.R()};
e.$=function(a,b){if(a&&!this.u.I){this.J=b;if(a=N(b,"video"))this.ya=function(a){return function(){Ba(a)}}(a),this.ca=function(a){return function(){a.ca()}}(a);this.u.I=!0;this.reset(!0);this.update()}};function Ca(a,b,c,d,f){0>Da(a.S,b,c,d,f)&&(a.la>b&&(a.la=b),a.ma<c&&(a.ma=c),a.S.push([b,c,d,f]))}function Q(a,b,c,d,f){0>Da(a.M,b,c,d,f)&&(a.da>b&&(a.da=b),a.ea<c&&(a.ea=c),a.M.push([b,c,d,f]))}
function Da(a,b,c,d,f){for(var g=0;g<a.length;g++)if(a[g][0]==b&&a[g][1]==c&&a[g][2]==d&&a[g][3]==f)return g;return-1}function Aa(a,b,c){void 0!==b&&(a.K=b,a.B.setSpeed&&(a.B.setSpeed.innerHTML=a.za[2<=b?0:b+1]),a.F("running at "+a.za[b].toLowerCase()+" speed "+a.fb[b]),c&&a.ca());a.U=0;a.Ca=ka();Ea(a)}e.ya=function(){};e.ca=function(){};function R(a,b,c,d){void 0!==a.B[b]&&(void 0===d&&(d=1),c="0000"+c.toString(16),a.B[b].innerHTML=c.slice(c.length-d).toUpperCase())}
function Fa(a){R(a,"A",a.g,2);R(a,"X",a.m,2);R(a,"Y",a.o,2);var b=Ga(a);R(a,"C",b&1?1:0);R(a,"Z",b&2?1:0);R(a,"I",b&4?1:0);R(a,"D",b&8?1:0);R(a,"B",b&16?1:0);R(a,"V",b&64?1:0);R(a,"N",b&128?1:0);R(a,"S",a.s,4);R(a,"PC",a.f,4);a.B.speed&&a.N&&(a.B.speed.innerHTML=a.N.toFixed(1)+"Mhz")}
function Ea(a,b){var c=30;c<a.xa&&(c=a.xa);c<a.oa&&(c=a.oa);var d=1;b&&a.K>a.ka&&a.N&&(d=a.N);d>a.fa&&2>a.K&&(d=a.fa);a.gb=Math.round(1E3/30);a.ga=Math.floor(1E6/c*d);a.ja=Math.floor(1E6/30*d);a.Ea=Math.floor(1E6/a.xa*d);a.Da=Math.floor(1E6/a.oa*d);b||(a.T=a.ja,a.W=a.Ea,a.V=a.Da);a.na=0}function Ha(a){1E6<=a.na&&Ea(a,!0);a.ba=0;a.hb=ka()}
function Ia(a){var b=ka(),c=a.gb;a.ba&&(c=Math.round(c*a.ba/a.ja));c-=b-a.hb;if(b-=a.Ca)a.N=Math.round(a.U/(100*b))/10,864E5<=b&&Aa(a);0>c?c=0:1==a.K?a.N<=a.fa&&(c=0):2==a.K&&(c=0);a.na+=a.ba;return c}
function P(a){if(wa(a,!0)){a.u.Z||(Aa(a),a.J&&a.J.start(),a.u.Z=!0,a.B.run&&(a.B.run.innerHTML="Halt"),a.ca());Ha(a);try{do{a.step(a.ga);var b=a.O-a.H;a.U+=b;a.ba+=b;a.O=a.H=0;a.W-=a.ga;0>=a.W&&(a.W+=a.Ea,a.ya());a.V-=a.ga;0>=a.V&&(a.V+=a.Da,Fa(a));a.T-=a.ga;if(0>=a.T){a.T+=a.ja;break}}while(a.u.Z)}catch(c){O(a);a.update();wa(a,!1);va(a,c.stack||c.message);return}setTimeout(function(a){return function(){P(a)}}(a),Ia(a))}else a.update(),a.J&&a.J.stop(a.Ca,a.U)}
e.step=function(a){this.b=this.j=-1;this.O=this.H=a;do{a=this.a[this.f];this.f++;this.v[a].call(this);if(0<=this.b){if(this.b>=this.la&&this.b<=this.ma)for(var b=this.b,c=this.f,d=0;d<this.S.length;d++)b>=this.S[d][0]&&b<=this.S[d][1]&&this.S[d][3].call(this.S[d][2],b,c);this.b=-1}else if(0<=this.j){if(this.j>=this.da&&this.j<=this.ea)for(b=this.j,c=this.f,d=0;d<this.M.length;d++)b>=this.M[d][0]&&b<=this.M[d][1]&&this.M[d][3].call(this.M[d][2],b,c);this.j=-1}this.H-=this.eb[a]}while(0<this.H);return!0};
function O(a){a.u.ra&&(a.u.wa=!0);a.O-=a.H;a.H=0;a.u.Z&&(a.u.Z=!1,a.B.run&&(a.B.run.innerHTML="Run"))}e.update=function(){this.ya();Fa(this)};function Ja(a){return a.u.Z?a.U+a.O-a.H:0}e.X=function(a){return this.a[a]};function Ga(a){var b=a.c&256?1:0,b=b|(a.i&255?0:2),b=b|((a.w&255^a.D^a.w>>1)&128?64:0),b=b|(a.h&128?128:0);return a.A&60|b}
function S(a,b,c){var d=a.c&256?1:0,f=(b&15)+(c&15)+d;10<=f&&(f=f+6&15|16);f+=(b&240)+(c&240);a.D=b^c;a.w=f;a.h=f&255;160<=f&&(f+=96);512<=f&&(f-=256);a.c=f;a.i=b+c+d&255;a.H--;return f&255}function T(a,b,c){var d=a.c&256?0:1,f=(b&15)-(c&15)-d;0>f&&(f=(f-6&15)-16);f+=(b&240)-(c&240);0>f&&(f-=96);a.h=a.i=(a.c=b-c-d)&255;a.D=b^c;a.w=a.c;a.c^=256;a.H--;return f&255}function za(a){a.g=0;a.m=0;a.o=0;a.s=256;a.A=0;a.h=0;a.i=0;a.D=0;a.w=0;a.c=0;a.f=0;a.b=-1;a.j=-1;a.N=0;a.U=a.O=a.H=0}
e.Lb=function(){this.f++;this.a[this.s--]=this.f>>8;this.s|=256;this.a[this.s--]=this.f&255;this.s|=256;this.A|=16;this.A=Ga(this);this.a[this.s--]=this.A;this.s|=256;this.A&=239;this.b=65534;this.f=this.a[this.b]|this.a[this.b+1]<<8};e.dd=function(){this.b=this.a[this.f++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.h=this.i=this.g|=this.a[this.b]};e.fd=function(){this.b=this.a[this.f++];this.h=this.i=this.g|=this.a[this.b]};
e.Bb=function(){this.j=this.a[this.f++];this.c=this.a[this.j]<<1;this.h=this.i=this.a[this.j]=this.c&255};e.jd=function(){this.A=Ga(this);this.a[this.s--]=this.A;this.s|=256};e.cd=function(){this.b=this.f++;this.h=this.i=this.g|=this.a[this.b]};e.Ab=function(){this.c=this.g<<1;this.h=this.i=this.g=this.c&255};e.$c=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=this.i=this.g|=this.a[this.b]};
e.yb=function(){this.j=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.a[this.j]<<1;this.h=this.i=this.a[this.j]=this.c&255};e.Kb=function(){this.f+=(this.h&128?0:(this.H--,this.a[this.f]<<24>>24))+1};e.ed=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.o;this.h=this.i=this.g|=this.a[this.b]};e.gd=function(){this.b=this.a[this.f++]+this.m&255;this.h=this.i=this.g|=this.a[this.b]};
e.Cb=function(){this.j=this.a[this.f++]+this.m&255;this.c=this.a[this.j]<<1;this.h=this.i=this.a[this.j]=this.c&255};e.Ob=function(){this.c=0};e.bd=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.h=this.i=this.g|=this.a[this.b]};e.ad=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.h=this.i=this.g|=this.a[this.b]};e.zb=function(){this.j=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.c=this.a[this.j]<<1;this.h=this.i=this.a[this.j]=this.c&255};
e.Bc=function(){this.b=this.f++;this.a[this.s--]=this.f>>8;this.s|=256;this.a[this.s--]=this.f&255;this.s|=256;this.f=this.a[this.b]|this.a[this.b+1]<<8};e.ub=function(){this.b=this.a[this.f++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.h=this.i=this.g&=this.a[this.b]};e.Hb=function(){this.b=this.a[this.f++];this.i=this.g&this.a[this.b];this.h=this.h&127|this.a[this.b]&128;this.w=0;this.D=this.a[this.b]&64?128:0};e.wb=function(){this.b=this.a[this.f++];this.h=this.i=this.g&=this.a[this.b]};
e.pd=function(){this.j=this.a[this.f++];this.c=this.c&65280|this.a[this.j];this.c<<=1;this.c=this.c&65534|(this.c&512?1:0);this.h=this.i=this.a[this.j]=this.c&255};e.ld=function(){this.s=this.s+1&255|256;this.A=this.a[this.s];this.c=this.A&1?256:0;this.i=this.A&2?0:1;this.h=this.A&128;this.w=0;this.D=this.A&64?128:0};e.tb=function(){this.b=this.f++;this.h=this.i=this.g&=this.a[this.b]};
e.od=function(){this.c=this.c&65280|this.g;this.c<<=1;this.c=this.c&65534|(this.c&512?1:0);this.h=this.i=this.g=this.c&255};e.Gb=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.g&this.a[this.b];this.h=this.h&127|this.a[this.b]&128;this.w=0;this.D=this.a[this.b]&64?128:0};e.qb=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=this.i=this.g&=this.a[this.b]};
e.md=function(){this.j=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.c&65280|this.a[this.j];this.c<<=1;this.c=this.c&65534|(this.c&512?1:0);this.h=this.i=this.a[this.j]=this.c&255};e.Ib=function(){this.f+=(this.h&128?(this.H--,this.a[this.f]<<24>>24):0)+1};e.vb=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.o;this.h=this.i=this.g&=this.a[this.b]};e.xb=function(){this.b=this.a[this.f++]+this.m&255;this.h=this.i=this.g&=this.a[this.b]};
e.qd=function(){this.j=this.a[this.f++]+this.m&255;this.c=this.c&65280|this.a[this.j];this.c<<=1;this.c=this.c&65534|(this.c&512?1:0);this.h=this.i=this.a[this.j]=this.c&255};e.Gd=function(){this.c=256};e.sb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.h=this.i=this.g&=this.a[this.b]};e.rb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.h=this.i=this.g&=this.a[this.b]};
e.nd=function(){this.j=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.c=this.c&65280|this.a[this.j];this.c<<=1;this.c=this.c&65534|(this.c&512?1:0);this.h=this.i=this.a[this.j]=this.c&255};e.wd=function(){this.s=this.s+1&255|256;this.A=this.a[this.s];this.c=this.A&1?256:0;this.i=this.A&2?0:1;this.h=this.A&128;this.w=0;this.D=this.A&64?128:0;this.s=this.s+2&255|256;this.f=this.a[this.s-1|256]|this.a[this.s]<<8};
e.pc=function(){this.b=this.a[this.f++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.h=this.i=this.g^=this.a[this.b]};e.rc=function(){this.b=this.a[this.f++];this.h=this.i=this.g^=this.a[this.b]};e.Xc=function(){this.j=this.a[this.f++];this.c=this.c&65279|(this.a[this.j]&1?256:0);this.a[this.j]=(this.c=this.c&65280|this.a[this.j]>>1)&255;this.h=this.i=this.c&255};e.hd=function(){this.a[this.s--]=this.g;this.s|=256};e.oc=function(){this.b=this.f++;this.h=this.i=this.g^=this.a[this.b]};
e.Wc=function(){this.c=this.c&65279|(this.g&1?256:0);this.g=(this.c=this.c&65280|this.g>>1)&255;this.h=this.i=this.c&255};e.Ac=function(){this.b=this.f;this.f=this.a[this.b]|this.a[this.b+1]<<8};e.lc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=this.i=this.g^=this.a[this.b]};e.Uc=function(){this.j=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.c&65279|(this.a[this.j]&1?256:0);this.a[this.j]=(this.c=this.c&65280|this.a[this.j]>>1)&255;this.h=this.i=this.c&255};
e.Mb=function(){this.f+=((this.w&255^this.D^this.w>>1)&128?0:(this.H--,this.a[this.f]<<24>>24))+1};e.qc=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.o;this.h=this.i=this.g^=this.a[this.b]};e.sc=function(){this.b=this.a[this.f++]+this.m&255;this.h=this.i=this.g^=this.a[this.b]};e.Yc=function(){this.j=this.a[this.f++]+this.m&255;this.c=this.c&65279|(this.a[this.j]&1?256:0);this.a[this.j]=(this.c=this.c&65280|this.a[this.j]>>1)&255;this.h=this.i=this.c&255};
e.Qb=function(){this.A&=251};e.nc=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.h=this.i=this.g^=this.a[this.b]};e.mc=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.h=this.i=this.g^=this.a[this.b]};e.Vc=function(){this.j=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.c=this.c&65279|(this.a[this.j]&1?256:0);this.a[this.j]=(this.c=this.c&65280|this.a[this.j]>>1)&255;this.h=this.i=this.c&255};
e.xd=function(){this.s=this.s+2&255|256;this.f=(this.a[this.s-1|256]|this.a[this.s]<<8)+1};e.La=function(){this.b=this.a[this.f++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.c=this.g+this.a[this.b]+(this.c&256?1:0);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255};e.mb=function(){this.b=this.a[this.f++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.g=S(this,this.g,this.a[this.b])};
e.Na=function(){this.b=this.a[this.f++];this.c=this.g+this.a[this.b]+(this.c&256?1:0);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255};e.ob=function(){this.b=this.a[this.f++];this.g=S(this,this.g,this.a[this.b])};e.ud=function(){this.j=this.a[this.f++];this.c=this.c&65280|this.a[this.j];this.c=this.c&65023|(this.c&1?512:0);this.c>>=1;this.h=this.i=this.a[this.j]=this.c&255};e.kd=function(){this.s=this.s+1&255|256;this.h=this.i=this.g=this.a[this.s]};
e.Ka=function(){this.b=this.f++;this.c=this.g+this.a[this.b]+(this.c&256?1:0);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255};e.lb=function(){this.b=this.f++;this.g=S(this,this.g,this.a[this.b])};e.td=function(){this.c=this.c&65280|this.g;this.c=this.c&65023|(this.c&1?512:0);this.c>>=1;this.h=this.i=this.g=this.c&255};e.zc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.f=this.a[this.b]|this.a[this.b+1]<<8};
e.Ha=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.g+this.a[this.b]+(this.c&256?1:0);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255};e.ib=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.g=S(this,this.g,this.a[this.b])};e.rd=function(){this.j=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.c&65280|this.a[this.j];this.c=this.c&65023|(this.c&1?512:0);this.c>>=1;this.h=this.i=this.a[this.j]=this.c&255};
e.Nb=function(){this.f+=((this.w&255^this.D^this.w>>1)&128?(this.H--,this.a[this.f]<<24>>24):0)+1};e.Ma=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.o;this.c=this.g+this.a[this.b]+(this.c&256?1:0);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255};e.nb=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.o;this.g=S(this,this.g,this.a[this.b])};
e.Oa=function(){this.b=this.a[this.f++]+this.m&255;this.c=this.g+this.a[this.b]+(this.c&256?1:0);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255};e.pb=function(){this.b=this.a[this.f++]+this.m&255;this.g=S(this,this.g,this.a[this.b])};e.vd=function(){this.j=this.a[this.f++]+this.m&255;this.c=this.c&65280|this.a[this.j];this.c=this.c&65023|(this.c&1?512:0);this.c>>=1;this.h=this.i=this.a[this.j]=this.c&255};e.Id=function(){this.A|=4};
e.Ja=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.c=this.g+this.a[this.b]+(this.c&256?1:0);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255};e.kb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.g=S(this,this.g,this.a[this.b])};e.Ia=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.c=this.g+this.a[this.b]+(this.c&256?1:0);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255};
e.jb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.g=S(this,this.g,this.a[this.b])};e.sd=function(){this.j=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.c=this.c&65280|this.a[this.j];this.c=this.c&65023|(this.c&1?512:0);this.c>>=1;this.h=this.i=this.a[this.j]=this.c&255};e.Md=function(){this.j=this.a[this.f++]+this.m&255;this.j=this.a[this.j]|this.a[this.j+1]<<8;this.a[this.j]=this.g};e.Ud=function(){this.j=this.a[this.f++];this.a[this.j]=this.o};
e.Od=function(){this.j=this.a[this.f++];this.a[this.j]=this.g};e.Rd=function(){this.j=this.a[this.f++];this.a[this.j]=this.m};e.kc=function(){this.h=this.i=this.o=this.o-1&255};e.$d=function(){this.h=this.i=this.g=this.m};e.Td=function(){this.j=this.a[this.f++]|this.a[this.f++]<<8;this.a[this.j]=this.o};e.Jd=function(){this.j=this.a[this.f++]|this.a[this.f++]<<8;this.a[this.j]=this.g};e.Qd=function(){this.j=this.a[this.f++]|this.a[this.f++]<<8;this.a[this.j]=this.m};
e.Db=function(){this.f+=(this.c&256?0:(this.H--,this.a[this.f]<<24>>24))+1};e.Nd=function(){this.j=this.a[this.f++];this.j=(this.a[this.j]|this.a[this.j+1]<<8)+this.o;this.a[this.j]=this.g};e.Vd=function(){this.j=this.a[this.f++]+this.m&255;this.a[this.j]=this.o};e.Pd=function(){this.j=this.a[this.f++]+this.m&255;this.a[this.j]=this.g};e.Sd=function(){this.j=this.a[this.f++]+this.o&255;this.a[this.j]=this.m};e.be=function(){this.h=this.i=this.g=this.o};
e.Ld=function(){this.j=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.a[this.j]=this.g};e.ae=function(){this.s=this.m|256};e.Kd=function(){this.j=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.a[this.j]=this.g};e.Rc=function(){this.b=this.f++;this.h=this.i=this.o=this.a[this.b]};e.Gc=function(){this.b=this.a[this.f++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.h=this.i=this.g=this.a[this.b]};e.Mc=function(){this.b=this.f++;this.h=this.i=this.m=this.a[this.b]};
e.Sc=function(){this.b=this.a[this.f++];this.h=this.i=this.o=this.a[this.b]};e.Ic=function(){this.b=this.a[this.f++];this.h=this.i=this.g=this.a[this.b]};e.Nc=function(){this.b=this.a[this.f++];this.h=this.i=this.m=this.a[this.b]};e.Yd=function(){this.h=this.i=this.o=this.g};e.Fc=function(){this.b=this.f++;this.h=this.i=this.g=this.a[this.b]};e.Xd=function(){this.h=this.i=this.m=this.g};e.Pc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=this.i=this.o=this.a[this.b]};
e.Cc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=this.i=this.g=this.a[this.b]};e.Kc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=this.i=this.m=this.a[this.b]};e.Eb=function(){this.f+=(this.c&256?(this.H--,this.a[this.f]<<24>>24):0)+1};e.Hc=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.o;this.h=this.i=this.g=this.a[this.b]};e.Tc=function(){this.b=this.a[this.f++]+this.m&255;this.h=this.i=this.o=this.a[this.b]};
e.Jc=function(){this.b=this.a[this.f++]+this.m&255;this.h=this.i=this.g=this.a[this.b]};e.Oc=function(){this.b=this.a[this.f++]+this.o&255;this.h=this.i=this.m=this.a[this.b]};e.Rb=function(){this.D=this.w=0};e.Ec=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.h=this.i=this.g=this.a[this.b]};e.Zd=function(){this.h=this.i=this.m=this.s&255};e.Qc=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.h=this.i=this.o=this.a[this.b]};
e.Dc=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.h=this.i=this.g=this.a[this.b]};e.Lc=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.h=this.i=this.m=this.a[this.b]};e.dc=function(){this.b=this.f++;this.h=this.i=this.c=this.o-this.a[this.b];this.c^=256};e.Wb=function(){this.b=this.a[this.f++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.h=this.i=this.c=this.g-this.a[this.b];this.c^=256};
e.ec=function(){this.b=this.a[this.f++];this.h=this.i=this.c=this.o-this.a[this.b];this.c^=256};e.Yb=function(){this.b=this.a[this.f++];this.h=this.i=this.c=this.g-this.a[this.b];this.c^=256};e.hc=function(){this.j=this.a[this.f++];this.h=this.i=this.a[this.j]=this.a[this.j]-1&255};e.yc=function(){this.h=this.i=this.o=this.o+1&255};e.Vb=function(){this.b=this.f++;this.h=this.i=this.c=this.g-this.a[this.b];this.c^=256};e.jc=function(){this.h=this.i=this.m=this.m-1&255};
e.cc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=this.i=this.c=this.o-this.a[this.b];this.c^=256};e.Sb=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=this.i=this.c=this.g-this.a[this.b];this.c^=256};e.fc=function(){this.j=this.a[this.f++]|this.a[this.f++]<<8;this.h=this.i=this.a[this.j]=this.a[this.j]-1&255};e.Jb=function(){this.f+=(this.i&255?(this.H--,this.a[this.f]<<24>>24):0)+1};
e.Xb=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.o;this.h=this.i=this.c=this.g-this.a[this.b];this.c^=256};e.Zb=function(){this.b=this.a[this.f++]+this.m&255;this.h=this.i=this.c=this.g-this.a[this.b];this.c^=256};e.ic=function(){this.j=this.a[this.f++]+this.m&255;this.h=this.i=this.a[this.j]=this.a[this.j]-1&255};
e.Pb=function(){this.A&=-9;this.v[97]=this.La;this.v[101]=this.Na;this.v[105]=this.Ka;this.v[109]=this.Ha;this.v[113]=this.Ma;this.v[117]=this.Oa;this.v[121]=this.Ja;this.v[125]=this.Ia;this.v[225]=this.Ta;this.v[229]=this.Va;this.v[233]=this.Sa;this.v[237]=this.Pa;this.v[241]=this.Ua;this.v[245]=this.Wa;this.v[249]=this.Ra;this.v[253]=this.Qa};e.Ub=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.h=this.i=this.c=this.g-this.a[this.b];this.c^=256};
e.Tb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.h=this.i=this.c=this.g-this.a[this.b];this.c^=256};e.gc=function(){this.j=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.h=this.i=this.a[this.j]=this.a[this.j]-1&255};e.ac=function(){this.b=this.f++;this.h=this.i=this.c=this.m-this.a[this.b];this.c^=256};
e.Ta=function(){this.b=this.a[this.f++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.c=this.g-this.a[this.b]-(this.c&256?0:1);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255;this.c^=256};e.Cd=function(){this.b=this.a[this.f++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.g=T(this,this.g,this.a[this.b])};e.bc=function(){this.b=this.a[this.f++];this.h=this.i=this.c=this.m-this.a[this.b];this.c^=256};
e.Va=function(){this.b=this.a[this.f++];this.c=this.g-this.a[this.b]-(this.c&256?0:1);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255;this.c^=256};e.Ed=function(){this.b=this.a[this.f++];this.g=T(this,this.g,this.a[this.b])};e.vc=function(){this.j=this.a[this.f++];this.h=this.i=this.a[this.j]=this.a[this.j]+1&255};e.xc=function(){this.h=this.i=this.m=this.m+1&255};
e.Sa=function(){this.b=this.f++;this.c=this.g-this.a[this.b]-(this.c&256?0:1);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255;this.c^=256};e.Bd=function(){this.b=this.f++;this.g=T(this,this.g,this.a[this.b])};e.Zc=function(){};e.$b=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=this.i=this.c=this.m-this.a[this.b];this.c^=256};
e.Pa=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.c=this.g-this.a[this.b]-(this.c&256?0:1);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255;this.c^=256};e.yd=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.g=T(this,this.g,this.a[this.b])};e.tc=function(){this.j=this.a[this.f++]|this.a[this.f++]<<8;this.h=this.i=this.a[this.j]=this.a[this.j]+1&255};e.Fb=function(){this.f+=(this.i&255?0:(this.H--,this.a[this.f]<<24>>24))+1};
e.Ua=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.o;this.c=this.g-this.a[this.b]-(this.c&256?0:1);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255;this.c^=256};e.Dd=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.o;this.g=T(this,this.g,this.a[this.b])};
e.Wa=function(){this.b=this.a[this.f++]+this.m&255;this.c=this.g-this.a[this.b]-(this.c&256?0:1);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255;this.c^=256};e.Fd=function(){this.b=this.a[this.f++]+this.m&255;this.g=T(this,this.g,this.a[this.b])};e.wc=function(){this.j=this.a[this.f++]+this.m&255;this.h=this.i=this.a[this.j]=this.a[this.j]+1&255};
e.Hd=function(){this.A|=8;this.v[97]=this.mb;this.v[101]=this.ob;this.v[105]=this.lb;this.v[109]=this.ib;this.v[113]=this.nb;this.v[117]=this.pb;this.v[121]=this.kb;this.v[125]=this.jb;this.v[225]=this.Cd;this.v[229]=this.Ed;this.v[233]=this.Bd;this.v[237]=this.yd;this.v[241]=this.Dd;this.v[245]=this.Fd;this.v[249]=this.Ad;this.v[253]=this.zd};
e.Ra=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.c=this.g-this.a[this.b]-(this.c&256?0:1);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255;this.c^=256};e.Ad=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.o;this.g=T(this,this.g,this.a[this.b])};
e.Qa=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.c=this.g-this.a[this.b]-(this.c&256?0:1);this.D=this.g^this.a[this.b];this.w=this.c;this.h=this.i=this.g=this.c&255;this.c^=256};e.zd=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.g=T(this,this.g,this.a[this.b])};e.uc=function(){this.j=(this.a[this.f++]|this.a[this.f++]<<8)+this.m;this.h=this.i=this.a[this.j]=this.a[this.j]+1&255};
e.Wd=function(){var a;a=this.a[this.f++];switch(a){case 0:this.F("HALT");O(this);break;case 1:a=this.f;for(var b="";a<this.a.length;){var c=this.a[a++];if(!c)break;b+=String.fromCharCode(c)}this.f=a;b=b.replace(/%A/g,u(this.g,2)).replace(/%X/g,u(this.m,2)).replace(/%Y/g,u(this.o,2));this.F(b);this.T=0;this.O-=this.H;this.H=0;break;default:this.f-=2,this.F("undefined opSim: "+u(a,2,!0)+" at "+u(this.f,4,!0)),O(this)}};
e.l=function(){var a=this.a[--this.f];this.F("undefined opcode: "+u(a,2,!0)+" at "+u(this.f,4,!0));O(this)};x(function(){for(var a=I(document,"c1pjs","cpu"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new ya(d);H(d,c)}});
function U(a){D.call(this,"C1PROM",a);this.b=this.a=null;this.c=a.size;if(this.f=a.image){a=this.f;var b=ha(this.f);"json"!=b&&"hex"!=b&&(a="http://"+(window?window.location.host:"www.pcjs.org")+"/api/v1/dump?file="+this.f+"&format=bytes");var c=this;v(a,function(a,b,g){Ka(c,a,b,g)})}}q(U,D);
U.prototype.Y=function(a,b,c,d){this.a=a;this.g=b;a=c-b+1;this.c||(this.c=a);a!=this.c?va(this,"computer-specified ROM size ("+u(a,4,!0)+") does not match component-specified size ("+u(this.c,4,!0)+")"):(d&&(this.G=d,Q(d,b,c,this,this.h)),La(this))};U.prototype.$=function(a){a&&!this.u.I&&(this.u.I=!0)};U.prototype.h=function(a,b){void 0!==b&&(a-=this.g,this.a[this.g+a]=this.b?this.b[a]:0)};
function Ka(a,b,c,d){if(d)a.F('Error loading ROM "'+b+'" ('+d+")");else{if("["==c.charAt(0)||"{"==c.charAt(0))try{var f=eval("("+c+")"),g=f.bytes;g?a.b=g:a.b=f}catch(h){a.F('Error processing ROM "'+b+'": '+h.message);return}else for(b=c.replace(/\n/gm," ").replace(/ +$/,"").split(" "),a.b=Array(b.length),c=0;c<b.length;c++)a.b[c]=parseInt(b[c],16);La(a)}}
function La(a){if(!K(a))if(!a.f)a.R();else if(a.b&&a.a){var b=a.b.length;if(b!=a.c)va(a,"ROM image size ("+u(b,4,!0)+") does not match component-specified size ("+u(a.c,4,!0)+")");else{for(var c=0;c<b;c++)a.a[a.g+c]=a.b[c];a.R()}}}x(function(){for(var a=I(document,"c1pjs","rom"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new U(d);H(d,c)}});function Ma(a){D.call(this,"C1PRAM",a)}q(Ma,D);Ma.prototype.Y=function(a){this.a=a;this.R()};
x(function(){for(var a=I(document,"c1pjs","ram"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new Ma(d);H(d,c)}});
function Na(a){D.call(this,"C1PKeyboard",a);this.u.I=!1;this.ba=a.model;this.K=8;this.ma=10;this.la=13;this.M=27;this.ga=this.K;this.ka=this.ma;this.da=this.la;this.H=this.M;this.s=241;this.D=224;this.ea=3;this.fa=15;this.o=1;this.j={};this.j["break"]=this.D;this.j.esc=this.H;this.j["ctrl-c"]=this.ea;this.j["ctrl-o"]=this.fa;this.b=[];this.b[49]=30464;this.b[33]=30704;this.b[50]=30208;this.b[34]=30448;this.b[51]=29952;this.b[35]=30192;this.b[52]=29696;this.b[36]=29936;this.b[53]=29440;this.b[37]=
29680;this.b[54]=29184;this.b[38]=29424;this.b[55]=28928;this.b[39]=29168;this.b[56]=26368;this.b[40]=26608;this.b[57]=26112;this.b[41]=26352;this.b[48]=25856;this.b[58]=25600;this.b[42]=25840;this.b[45]=25344;this.b[61]=25584;this.b[46]=22272;this.b[62]=22512;this.b[108]=22016;this.b[76]=22256;this.b[92]=22256;this.b[111]=21760;this.b[79]=22E3;this.b[this.ga]=22E3;this.b[this.ka]=21504;this.b[this.da]=21248;this.b[119]=18176;this.b[87]=18416;this.b[101]=17920;this.b[69]=18160;this.b[114]=17664;this.b[82]=
17904;this.b[116]=17408;this.b[84]=17648;this.b[121]=17152;this.b[89]=17392;this.b[117]=16896;this.b[85]=17136;this.b[105]=16640;this.b[73]=16880;this.b[115]=14080;this.b[83]=14320;this.b[100]=13824;this.b[68]=14064;this.b[102]=13568;this.b[70]=13808;this.b[103]=13312;this.b[71]=13552;this.b[104]=13056;this.b[72]=13296;this.b[106]=12800;this.b[74]=13040;this.b[107]=12544;this.b[75]=12784;this.b[91]=12784;this.b[120]=9984;this.b[88]=10224;this.b[99]=9728;this.b[67]=9968;this.b[118]=9472;this.b[86]=
9712;this.b[98]=9216;this.b[66]=9456;this.b[110]=8960;this.b[78]=9200;this.b[94]=9200;this.b[109]=8704;this.b[77]=8944;this.b[93]=8944;this.b[44]=8448;this.b[60]=8688;this.b[113]=5888;this.b[81]=6128;this.b[97]=5632;this.b[65]=5872;this.b[122]=5376;this.b[90]=5616;this.b[32]=5120;this.b[47]=4864;this.b[63]=5104;this.b[59]=4608;this.b[43]=4848;this.b[112]=4352;this.b[80]=4592;this.b[64]=4592;this.b[this.s]=1536;this.b[this.H]=1280;this.b[240]=512;this.b[242]=256;this.b[244]=0;this.reset()}q(Na,D);
e=Na.prototype;e.reset=function(){this.pa(this.ba);this.c=this.o;this.O=0;this.f=[this.o,0,0,0,0,0,0,0];this.v=[];if(this.g)for(var a in this.g)isNaN(+a)||this.g[a]&&clearTimeout(this.g[a]);this.g=[];this.W=this.h=0;this.S=-1;this.N=this.f;this.U=this.A=0;this.i=""};
e.L=function(a,b,c){if(void 0===this.B[b])switch(b){case "keyDown":return this.B[b]=c,c.onkeydown=function(a){return function(b){return Oa(a,b,!0)}}(this),!0;case "keyPress":return this.B[b]=c,c.onkeypress=function(a){return function(b){var c=!0;b=b||window.event;b=b.which||b.keyCode;a.i="";a.c&8?a.c&=-9:c=!Pa(a,b);return c}}(this),!0;case "keyUp":return this.B[b]=c,c.onkeyup=function(a){return function(b){return Oa(a,b,!1)}}(this),!0;case "break":return this.B[b]=c,c.onclick=function(a){return function(){a.J&&
a.J.reset(!0)}}(this),!0;default:if(void 0!==this.j[b])return this.B[b]=c,c.onclick=function(a,b,c){return function(){a.G&&a.G.ca();return!Pa(a,c)}}(this,b,this.j[b]),!0}return!1};e.Y=function(a,b,c,d){this.a=a;this.V=b;this.ja=c-b+1;this.oa=this.V+this.ja;d&&(this.G=d,Q(d,b,c,this,this.$a));this.R()};e.pa=function(a){this.m=a;this.w=255;600!=this.m&&(this.w=0,this.F("updated keyboard model: "+this.m))};e.$=function(a,b){a&&!this.u.I&&(this.u.I=!0,this.J=b)};
e.R=function(){this.T=(this.na=w("iOS"))||w("Android");D.prototype.R.call(this)};function Qa(a,b){b=b?100:250;a.G&&a.G.N&&(b/=a.G.N);return b}function Ra(a,b){!a.h||void 0!==b&&b==a.h||(clearTimeout(a.g[a.h]),V(a,a.h,!1,4))}function W(a,b,c){a.i=b;Sa(a,c||300)}function Sa(a,b){if(0<a.i.length){var c=a.i.charCodeAt(0);10==c&&(c=13);65<=c&&90>=c&&(c+=32);a.i=a.i.substr(1);Pa(a,c)}0<a.i.length&&setTimeout(function(a){return function(){Sa(a,b)}}(a),b)}
function Oa(a,b,c){var d,f=!c;b=b.keyCode;c&&(a.W=b);16==b?(a.c&=-5,c&&(a.c|=4),b+=224,f=!1):18==b?(a.c&=-3,c&&(a.c|=2),b+=224,f=!1):b==a.s-224?(a.c&=-65,c&&(a.c|=64),b+=224,f=!1):20==b?(c=!c,a.c&=~a.o,c&&(a.c|=a.o),b+=224,f=!1):91==b?(a.c&=-9,c&&(a.c|=8),f=!1,d=!0):d=9==b?f=!1:b==a.M||b==a.K?c?!Pa(a,b):!1:!0;f&&(a.c&=-9,a.T||b!=a.W||Ra(a));void 0===d&&(d=!V(a,b,c,2));return d}
function Pa(a,b){var c=!1;b==a.D?a.J&&(a.J.reset(!0),c=!0):(a.T&&65<=b&&90>=b&&(b+=32),Ra(a,b),V(a,b,!0,0)&&(2==a.G.K?V(a,b,!1,1):(c=!1,a.g[b]&&(clearTimeout(a.g[b]),c=!0),c=Qa(a,c),a.g[a.h=b]=setTimeout(function(a){return function(){V(a,b,!1,3)}}(a),c)),c=!0));return c}
function V(a,b,c,d){var f=!1;c||(a.g[b]=null,a.h==b&&(a.h=0));var g=0,h=a.b[b];void 0===h&&(1<=b&&26>=b&&(b+=64,g=a.s),h=a.b[b]);void 0!==h&&(b=h>>12,f=h>>8&15,g||(g=h&255),c?(a.f[b]|=1<<f,a.f[0]=g==a.s?a.f[0]|64:240==g?a.f[0]|4:242==g?a.f[0]|2:a.f[0]&-71):(a.f[b]&=~(1<<f),a.f[0]&=-71,a.f[0]|=a.c&70),c=!d&&!a.v.length,a.v.push(a.f.slice()),Ta(a,c),f=!0);return f}e.X=function(){};e.$a=function(a){this.O=this.G.X(a)^this.w;this.A++;Ta(this,!1,a)};
function Ta(a,b,c){var d=Ja(a.G);b||(2==a.G.K?b=void 0!==c&&32<=a.A:(b=d-a.U,b=0>b||8192<=b));b&&(b=a.v.shift(),void 0!==b&&(a.N=b),a.A=0,a.U=d);for(b=d=0;8>b;b++)a.O&1<<b&&(d|=a.N[b]);d^=a.w;if(void 0!==c)a.a[c]=d;else if(c=a.V,d!=a.S)for(;c<a.oa;c++)a.a[c]=d;a.S=d}x(function(){for(var a=I(document,"c1pjs","keyboard"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new Na(d);H(d,c)}});
function Ua(a,b,c,d){D.call(this,"C1PVideo",a);this.S=a.model;this.M=a.charCols;this.N=a.charRows;this.U=a.screenWidth;this.V=a.screenHeight;this.i=a.charWidth;this.j=a.charHeight;Va(this);this.h=b;this.w=c;this.f=d;var f;b=["","moz","ms","webkit"];a=a.smoothing;if(!pa){c={};if(window){f||(f=window.location.search.substr(1));for(var g=/\+/g,h=/([^&=]+)=?([^&]*)/g;d=h.exec(f);)c[decodeURIComponent(d[1].replace(g," "))]=decodeURIComponent(d[2].replace(g," "))}pa=c}(f=pa.smoothing)&&(a="true"==f);if(null!=
a)for(f=0;f<b.length;f++)if(c=(c=b[f])?c+"ImageSmoothingEnabled":"imageSmoothingEnabled",void 0!==this.w[c]){this.w[c]=a;break}}q(Ua,D);e=Ua.prototype;e.reset=function(a){this.pa(this.S);if(this.a)for(var b=this.s;b<this.A;b++)this.a[b]=a?Math.floor(256*Math.random()):32};e.L=function(a,b,c){switch(b){case "refresh":return this.B[b]=c,c.onclick=function(a){return function(){Wa(a);Ba(a)}}(this),!0}return!1};
e.Y=function(a,b,c,d){this.a=a;this.s=b;this.T=c-b+1;this.A=this.s+this.T;d&&(this.G=d,Ca(d,56832,56832,this,this.X),Q(d,56832,56832,this,this.bb));this.reset(!0)};function Va(a,b,c,d,f){a.o=void 0!==b?b:a.M;a.W=void 0!==c?c:a.N;a.c=a.o*a.W;a.A=a.s+a.c;a.K=void 0!==d?d:0;a.O=void 0!==f?f:c;a.D=Math.floor(a.U/a.o);a.H=Math.floor(a.V/a.O)}e.ca=function(){this.h.focus()};
e.pa=function(a){this.m=a;600==this.m?(Va(this,this.M,this.N,3,25),1024==this.c&&this.G&&(this.g=this.A+this.c-1,Q(this.G,this.g,this.g,this,this.Ya))):(this.F("updated video model: "+this.m),Va(this,64,32));Wa(this);Ba(this)};e.$=function(a,b){if(a&&!this.u.I&&K(this)){if(this.u.I=!0,this.b=N(b,"keyboard"))this.b.L("canvas","keyDown",this.h),this.b.L("canvas","keyPress",this.h),this.b.L("canvas","keyUp",this.h)}else!a&&this.u.I&&(this.u.I=!1)};
e.R=function(){this.i||(this.i=Math.floor(this.f.width/16));this.j||(this.j=Math.floor(this.f.height/16));D.prototype.R.call(this)};e.X=function(a){var b=this.G.X(a);this.G.a[a]=b&127|(Math.floor(Ja(this.G)/8333)&1?128:0)};e.bb=function(){};
e.Ya=function(a,b){if(void 0!==b){this.pa(540);this.b&&this.b.pa(542);a=this.G;b=a.M;var c=[],d=Da(b,this.g,this.g,this,this.Ya);if(0<=d){c.push(b[d][0]);c.push(b[d][1]);b.splice(d,1);for(var f=65536,g=0,d=0;d<b.length;d++)f>b[d][0]&&(f=b[d][0]),g<b[d][1]&&(g=b[d][1]);c.push(f);c.push(g)}4==c.length&&(a.da=c[2],a.ea=c[3])}};function Wa(a){a.v=Array(a.c);for(var b=0;b<=a.c;b++)a.v[b]=-1}
function Ba(a){var b=0;if(a.u.I)for(;b<a.c;){var c=a.a[a.s+b];if(a.v[b]!=c){var d=Math.floor(b/a.o);if(d>=a.K&&(d-=a.K,d<a.O)){var f=c*a.i;a.w.drawImage(a.f,f%a.f.width,Math.floor(f/a.f.width)*a.j,a.i,a.j,b%a.o*a.D,d*a.H,a.D,a.H)}a.v[b]=c}b++}}
x(function(){for(var a=I(document,"c1pjs","video"),b=0;b<a.length;b++){var c=a[b],d=G(c),f=document.createElement("canvas");if(!f||!f.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}f.setAttribute("class","c1pjs-canvas");f.setAttribute("width",d.screenWidth);f.setAttribute("height",d.screenHeight);f.setAttribute("contenteditable","true");f.setAttribute("autocapitalize","off");f.setAttribute("autocorrect","off");f.style.backgroundColor=d.screenColor;
f.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(f.style.height=(c.clientWidth*d.screenHeight/d.screenWidth|0)+"px",c.onresize=function(a,b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,f,d.screenWidth,d.screenHeight));c.appendChild(f);var g=new Image,h=f.getContext("2d"),f=new Ua(d,f,h,g);g.onload=function(a){return function(){a.R()}}(f,d.charSet);g.src=d.charSet;H(f,c)}});
function Xa(a){D.call(this,"C1PSerialPort",a);this.u.I=!1;this.j=a.demo;this.reset(!0)}q(Xa,D);e=Xa.prototype;e.reset=function(a){if(a||this.f!=Ya){this.g=-1;this.h=0;this.c="";if(this.j){a=1;if(this.Ba){var b=this.Ba.match(/\d+/);null!==b&&(a=parseInt(b[0],10))}this.c='10 PRINT "HELLO OSI #'+a+'"\n'}this.i=!0;this.f=Za}};e.start=function(){this.b&&this.j&&(W(this.b," C\n\n",3E3),setTimeout(function(a){return function(){a.f=$a;W(a.b,"LOAD\n")}}(this),12E3));this.j=!1};
e.L=function(a,b,c){var d=this;switch(b){case "listSerial":return this.B[b]=c,!0;case "loadSerial":return this.B[b]=c,c.onclick=function(){d.B.listSerial&&v(d.B.listSerial.value,function(a,b,c){ab(d,a,b,c)})},!0;case "mountSerial":return!w("Mobi")&&window&&"FileReader"in window?(this.B[b]=c,c.addEventListener("change",function(){var a=c.children[0];a.children[1].disabled=!a.children[0].files.length}),c.onsubmit=function(a){var b=a.currentTarget[1].files[0],c=new FileReader;c.onload=function(){ab(d,
b.name,c.result.toString(),0)};c.readAsText(b);return!1}):c.parentNode.removeChild(c),!0}return!1};e.Y=function(a,b,c,d){this.a=a;this.m=b;this.s=c-b+1;this.o=this.m+this.s;if(this.G=d)Ca(d,b,c,this,this.X),Q(d,b,c,this,this.ab);this.R()};e.$=function(a,b){a&&!this.u.I&&(this.u.I=!0,this.J=b,this.b=N(b,"keyboard"))};
function ab(a,b,c,d){if(c){a.h=0;a.c=c;a.i=!0;a.f=Za;if(-1!==b.indexOf(".json",b.length-5))try{d="";var f=eval("("+c+")").bytes;for(c=0;c<f.length;c++)d+=String.fromCharCode(f[c]);a.c=d;a.i=!1}catch(g){a.F('Error processing file "'+b+'": '+g.message);return}a.J&&a.b&&a.G.u.Z?(a.F("auto-loading "+b),a.G.ca(),"."!=a.c.charAt(0)?(a.f=$a,W(a.b,"NEW\nLOAD\n")):(a.f=Ya,a.J.reset(!0),W(a.b,"ML"))):a.F(b+" ready to load")}else a.F('Error loading file "'+b+'" ('+d+")")}
e.X=function(a,b){void 0!==b&&(a&1?bb(this):this.c&&!this.h&&bb(this))};e.ab=function(){};function bb(a){if(void 0!==a.c){a.g=-1;if(a.h<a.c.length){var b=a.c.charCodeAt(a.h++)&255;a.i&&10==b&&(b=13);a.g=b}else a.c="",a.h=0,a.f==$a&&a.b&&W(a.b," \nRUN\n"),a.f=Za;for(b=a.m+0;b<a.o;b+=2)a.a[b]=0<=a.g?cb:db;for(b=a.m+1;b<a.o;b+=2)a.a[b]=0<=a.g?a.g:0}}var db=0,cb=1,Za=0,$a=1,Ya=2;x(function(){for(var a=I(document,"c1pjs","serial"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new Xa(d);H(d,c)}});
function eb(a){D.call(this,"C1PDiskController",a);this.u.I=!1;this.reset(!0)}q(eb,D);e=eb.prototype;e.reset=function(a){fb(this);this.b=-1;a&&(this.c=[],this.c[0]={ce:0,Ga:40,cb:!0,ia:20,aa:0,ha:-1,qa:[]})};
function fb(a){a.s={C:64,read:function(){},update:function(a){return function(b){void 0!==b&&(this.C=b);a.i.C&4||X(a,0,this)}}(a)};a.f={C:255,read:function(){this.update()},update:function(a){return function(b){void 0===b?b=a.f.C:gb(a,b,a.h.C);b=(b|190)&-2;if(0<=a.b&&a.c[a.b].qa.length){var c=a.c[a.b];c.cb&&(b&=-33);c.aa||(b&=-3);10>=--c.ia&&(0<c.ia?(b&=-129,hb(a)):(c.ia=100,0<=a.b&&(a.c[a.b].ha=0,ib(a))))}this.C=b;a.i.C&4&&X(a,0,this)}}(a)};a.i={C:0,read:function(){},update:function(a){return function(b){void 0!==
b&&(this.C=b&-193);X(a,1,this);a.f.update();a.s.update()}}(a)};a.v={C:255,read:function(){},update:function(a){return function(b){void 0!==b&&(this.C=b);a.j.C&4||X(a,2,this)}}(a)};a.h={C:255,read:function(){},update:function(a){return function(b){void 0===b?b=a.h.C:gb(a,a.f.C,b);if(0<=a.b&&a.b<a.c.length){var c=a.c[a.b];c.qa.length&&a.h.C&8&&!(b&8)&&(b&4?c.aa--:c.aa++,c.aa>=c.Ga&&(c.aa=c.Ga),0>c.aa&&(c.aa=0),c.ia=20,a.f.update(a.f.C|128),hb(a))}this.C=b;a.j.C&4&&X(a,2,this)}}(a)};a.j={C:0,read:function(){},
update:function(a){return function(b){void 0!==b&&(this.C=b&-193);X(a,3,this);a.h.update();a.v.update()}}(a)};a.w={C:0,read:function(){},update:function(a){return function(b){void 0!==b&&(3==(b&3)&&(a.g.C=14),this.C=b);a.g.update()}}(a)};a.g={C:14,read:function(){},update:function(a){return function(b){void 0===b&&(b=a.g.C);b&=-2;0<=a.b&&0<=a.c[a.b].ha&&(b|=1);this.C=b;X(a,16,this)}}(a)};a.o={C:0,read:function(a){return function(){ib(a)}}(a),update:function(a){return function(b){void 0!==b&&(this.C=
b);X(a,17,this)}}(a)};a.A={C:0,read:function(){},update:function(){return function(){}}(a)}}e.L=function(a,b,c){switch(b){case "listDisk":return this.B[b]=c,!0;case "loadDisk":return this.B[b]=c,c.onclick=function(a){return function(){if(a.B.listDisk){var b=a.B.listDisk.value,c=b;".json"!=b.substr(b.length-5)&&(c="http://"+window.location.host+"/api/v1/dump?disk="+b);a.F("loading "+ga(b)+"...");v(c,function(b,c,d){jb(a,b,c,d)})}}}(this),!0}return!1};
e.Y=function(a,b,c,d){this.a=a;this.m=b;if(this.G=d)Ca(d,b,c,this,this.X),Q(d,b,c,this,this.Za);this.R()};e.$=function(a){a&&!this.u.I&&(this.u.I=!0)};
function jb(a,b,c,d){if(d)a.F("disk load error ("+d+")");else{d=[];a.F("mounting "+b+"...");try{if(d=eval("("+c+")"),d.length)if(d[0].length){var f=d[0];if(void 0===f[0].trackNum)a.F("data error: "+f[0]);else if(a.c[0]){for(c=0;c<f.length;c++){var g,h=f[c],l=h.sectors;if(void 0===(g=h.trackNum)||void 0===l)throw Error("track "+c+" missing data");g!=c&&B("track "+g+" out of order (expected "+c+")");d=[];var k,n,m;if(g){kb(d,h,"trackSig");lb(d,h);Y(d,h,"trackType");for(var p=0;p<l.length;p++){k=l[p];
n=k.sectorData;Y(d,k,"sectorSig");Y(d,k,"sectorNum");Y(d,k,"sectorPages");for(m=0;m<n.length;m++)d.push(n[m]);kb(d,k,"sectorEndSig")}}else for(k=l[0],n=k.sectorData,Y(d,h,"trackLoad",2),Y(d,k,"sectorPages"),m=0;m<n.length;m++)d.push(n[m]);f[g].Xa=d}a.c[0].qa=f;a.F("mount of "+b+" complete")}else a.F("no available drives")}else a.F("no tracks: "+b);else a.F("no data: "+b)}catch(sb){a.F("disk data error: "+sb.message)}}}
function lb(a,b){b=b.trackNum;if(void 0===b)throw Error("missing bcd value: trackNum");a.push(Math.floor(b/10)<<4|b%10)}function Y(a,b,c,d){b=b[c];if(void 0===b)throw Error("missing binary value: "+c);2==d&&a.push(b>>8&255);a.push(b&255)}function kb(a,b,c){b=b[c];if(void 0===b)throw Error("missing signature: "+c);for(c=0;c<b.length;c++)a.push(b.charCodeAt(c))}
function mb(a,b,c){b&=63;16>b?b&=3:32>b&&(b&=17);switch(b){case 0:a=a.i.C&4?a.f:a.s;break;case 1:a=a.i;break;case 2:a=a.j.C&4?a.h:a.v;break;case 3:a=a.j;break;case 16:a=c?a.w:a.g;break;case 17:a=a.o;break;default:a=a.A}return a}e.X=function(a,b){void 0!==b&&mb(this,a-this.m,!1).read()};e.Za=function(a,b){void 0!==b&&(b=this.G.X(a),mb(this,a-this.m,!0).update(b))};function gb(a,b,c){var d=-1;void 0!==b&&void 0!==c&&(d=0,c&32||(d|=2),a.f.C&64||(d|=1));a.b!=d&&(a.b=d,a.g.update())}
function hb(a){0<=a.b&&(a.c[a.b].ha=-1,a.o.update(255),a.g.update())}function ib(a){var b;if(0<=a.b){b=a.c[a.b];var c=b.qa[b.aa];void 0!==c&&(0<=b.ha&&b.ha<c.Xa.length?(b.ia=100,b=c.Xa[b.ha++],a.o.update(b),a.g.update()):(b.ia=10,hb(a)))}}function X(a,b,c){a.G.a[b+a.m]=c.C}x(function(){for(var a=I(document,"c1pjs","disk"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new eb(d);H(d,c)}});function Z(a,b){D.call(this,"C1PComputer",a);this.P=b}q(Z,D);
Z.prototype.reset=function(a){var b=null,c;for(c in this.P)for(var d=0;d<this.P[c].length;d++){var f=this.P[c][d];f&&f.reset&&(f.reset(),"cpu"==c&&(b=f))}b&&(b.update(),a&&P(b))};Z.prototype.start=function(){for(var a in this.P)if("cpu"!=a)for(var b=0;b<this.P[a].length;b++){var c=this.P[a][b];c&&c.start&&c.start()}};Z.prototype.stop=function(a,b){for(var c in this.P)if("cpu"!=c)for(var d=0;d<this.P[c].length;d++){var f=this.P[c][d];f&&f.stop&&f.stop(a,b)}};
Z.prototype.L=function(a,b,c){switch(b){case "reset":return this.B[b]=c,c.onclick=function(a){return function(){a.reset()}}(this),!0}return!1};function N(a,b){return a.P[b]?a.P[b][0]:null}function nb(a){var b=null,c;for(c in a.P)for(var d=0;d<a.P[c].length;d++){var f=a.P[c][d];if(f){if(!K(f)){K(f,function(a){return function(){nb(a)}}(a));return}"cpu"==c?b=f:f.$&&f.$(!0,a)}}a.R();a.F("C1Pjs v1.34.1\nCopyright \u00a9 2012-2017 Jeff Parsons <Jeff@pcjs.org>");b&&b.$(!0,a)}
x(function(){for(var a=I(document,"c1pjs","computer"),b=0;b<a.length;b++){for(var c=a[b],d=G(c),f,g={},h,l=0,k=0,n=0;n<d.modules.length;n++){var m=d.modules[n];if(!n){if("cpu"!=m.type)break;l=m.start;k=m.end;h=Array(k+1-l);for(f=l;f<h.length;f++)h[f]=0}if(f=F(m.refID,d.id)){var p=m.type;void 0===g[p]&&(g[p]=[]);g[p].push(f);f.Y&&void 0!==m.start&&f.Y(h,m.start,m.end,g.cpu[0])}else{B('no component for <module refid="'+m.refID+'">');return}}if(!h){B('<module type="cpu"> definition must appear first in the <computer> specification');
break}if(f=F("debugger",d.id))g["debugger"]=[f],f.Y&&f.Y(h,l,k,g.cpu[0]);l=new Z(d,g);if(k=F("panel",d.id))if(g.panel=[k],k.sa){f=d.id;d=void 0;g=[];f&&(f=0<(d=f.indexOf("."))?f.substr(0,d+1):"");for(d=0;d<E.length;d++)n=E[d],f&&n.id.indexOf(f)||g.push(n);d=g;for(g=0;g<d.length;g++)f=d[g],f!=k&&(f.ta=k.ta,f.F=k.F,f.sa=k.sa)}H(l,c);nb(l)}});var ob=0;function pb(a,b,c,d,f,g){f("Loading "+a+"...");v(a,function(h,l,k){k?(l||(l="unable to load "+a+" ("+k+")"),g(l,null)):qb(l,a,b,c,d,f,g)})}
function qb(a,b,c,d,f,g,h){function l(a,g){if(g)h(g,null);else{c&&(L[c]&&b&&(L[c][b]=a),(g=b)&&0>g.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(g=window.location.pathname+g),d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{",d+='url:"'+g+'"}',"object"==typeof resources&&(g=null),a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(g?' url="'+g+'"':"")));f||(a=a.replace(/(<xsl:variable name="APPNAME">).*?(<\/xsl:variable>)/,
"$1C1Pjs$2"),a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,"$1c1pjs$2"));g=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(g=new window.ActiveXObject("Microsoft.XMLDOM"),g.async=!1,g.loadXML(a)):g=(new window.DOMParser).parseFromString(a,"text/xml")}catch(m){g=null,a=m.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?f?rb(a,g,l):l(a,null):h("no data"+(b?" for file: "+
b:""),null)}
function rb(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var f=d[2];b("Loading "+f+"...");v(f,function(g,h,l){if(l||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+l+")");else{if(g=d[3])if(l=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=l[0],n,m=/( [a-z]+=)(['"])(.*?)\2/g;n=m.exec(g);)k=0>k.indexOf(n[1])?k.replace(">",n[0]+">"):k.replace(new RegExp(n[1]+"(['\"])(.*?)\\1"),n[0]);l[0]!=k&&(h=h.replace(l[0],k))}else{c(a,"missing <"+d[1]+"> in "+f);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,"");
a=a.replace(d[0],h);rb(a,b,c)}})}else c(a,null)}
function tb(a,b,c){function d(a){if(void 0===h){var b=g&&I(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ia(a))}function f(a){d("Error: "+a);l&&(--ob||C(!0));l=!1}var g,h,l=!0;ob++;L[a]={};try{if(g=document.getElementById(a)){var k;if("object"==typeof resources&&(k=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],m=document.createElement("style");m.type="text/css";m.styleSheet?m.styleSheet.cssText=k:m.appendChild(document.createTextNode(k));n.appendChild(m)}c||(c=
"/versions/c1pjs/1.34.1/components.xsl");k=function(h,k){k?pb(c,null,null,!1,d,function(h,l){l?(L[a]&&c&&(L[a][c]=h),d("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window?(l=k.transformNode(l))?(g.outerHTML=l,--ob||C(!0)):f("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(h=new XSLTProcessor,h.importStylesheet(l),(l=h.transformToFragment(k,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--ob||C(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(h)}):f(h)};"<"!=b.charAt(0)?pb(b,a,void 0,!0,d,k):qb(b,null,a,void 0,!1,d,k)}else f("missing machine element: "+a)}catch(p){f(p.message)}return l}window.embedC1P=function(a,b,c){C(!1);return tb(a,b,c)};window.findMachineComponent=function(a,b){return qa(b,a+".machine")};
window.processMachineScript=function(a,b){var c=!1;a+=".machine";if("string"==typeof b&&!J[a]){for(var c=!0,d=J,f=a,g=b.length,h=[],l=[],k="",n=null,m=0;m<g;m++){var p=b[m];if('"'==p||"'"==p)n&&p!=n?k+=p:(n?n=null:n=p,k&&(l.push(k),k=""));else{if(!n){if("\r"==p||"\n"==p)p=";";if(" "==p||"\t"==p||";"==p){k&&(l.push(k),k="");";"==p&&l.length&&(h.push(l),l=[]);continue}}k+=p}}k&&l.push(k);l.length&&h.push(l);d[f]=h;ra(a)||(c=!1)}return c};window.enableEvents=C;window.sendEvent=na;})();

View file

@ -0,0 +1,278 @@
@CHARSET "UTF-8";
/**
@author Jeff Parsons (@jeffpar)
@website http://www.pcjs.org/
@created 2013-05-05
@modified 2014-02-23
@license http://www.gnu.org/licenses/gpl.html
*/
body {
margin: 0;
background: #202020;
}
h1, h2 {
margin-top: 0;
color: #cccccc;
}
h1, h2, h3, h4 {
word-wrap: break-word;
}
h4 a {
color: #cccccc !important;
}
p {
line-height: 1.5em;
}
img {
max-width: 100%;
}
a img {
vertical-align: bottom;
}
pre, code {
color: #000000;
background-color: #cccccc;
font-family: Monaco, Consolas, "Lucida Console", monospace;
font-size: 12px;
}
pre {
margin: 1em 2em;
padding: 1em;
border-radius: 5px;
overflow: auto;
}
code {
padding: 1px;
}
pre a, code a {
color: #006400 !important;
}
.common {
width: 100%;
margin: 0 auto;
color: #cccccc;
}
.common a {
color: #7fc07f;
text-decoration: none;
}
.common hr {
border-color: #808080;
}
.common a:hover {
text-decoration: underline;
}
.common, .machine {
font-family: "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
font-size: 15px;
}
.machine {
overflow: hidden;
}
.c1pjs {
overflow: visible;
}
.machine-placeholder {
text-align: center;
font-weight: bold;
}
.machine-floating {
position: relative;
z-index: auto;
background-color: transparent;
padding-right: 0;
}
.machine-sticky {
position: fixed !important;
z-index: 1 !important;
background-color: #404040 !important;
padding-right: 16px !important;
top: 0 !important;
}
.common-top {
background: #202020;
font-size: small;
}
.common-top-left {
float: left;
width: 60%;
}
.common-top-left ul {
line-height: 1.5em;
list-style-type: none;
margin: 0;
padding: 1em 1em 1em 9px;
overflow: hidden;
}
.common-top-left ul li {
display: block;
float: left;
}
.common-top-left ul li a {
border-right: 1px solid #6f6f6f;
padding: 2px 6px 2px 6px;
}
.common-top-left ul li:last-child a {
border-right: none;
}
.common-top-right {
float: right;
width: 40%;
}
.common-top-right p {
float: right;
margin: 0;
padding: 1em;
}
.common-middle {
clear: both;
padding: 1px 1em 1px 1em;
background: #404040;
}
.common-sidebar {
float: left;
font-size: small;
width: 140px;
padding-bottom: 20px;
overflow: hidden;
white-space: nowrap;
word-wrap: break-word;
}
.common-list {
list-style-type: none;
margin-top: 0;
margin-bottom: 0;
padding-left: 0;
}
.common-list li {
padding-bottom: 7px;
}
.common-list-data {
list-style-type: none;
margin-top: 0;
margin-bottom: 0;
padding-left: 0;
}
.common-list-data li {
line-height: 1.5em;
}
.common-list-data-items, .common-list-data-subitems {
font-size: x-small;
list-style-type: none;
margin-top: 0;
margin-bottom: 0;
padding-left: 2em;
}
.common-list-data-items li, .common-list-data-subitems li {
padding-bottom: 0;
}
.common-main {
margin-left: 150px;
}
.common-main blockquote {
text-align: justify;
}
.common-image-gallery {
margin: 0 auto;
text-align: center;
}
.common-image-gallery:after {
content: '';
display: block;
}
.common-image-frame {
display: inline-block;
margin: 8px;
text-align: center;
}
.common-image-link {
padding: 5px;
border: 1px solid black;
border-radius: 5px;
background-color: #FAEBD7;
}
.common-image-label {
font-size: x-small;
}
.common-bottom {
clear: both;
padding-top: 1em;
}
.common-bottom:after {
content: '';
display: block;
clear: both;
}
.common-reference {
float: left;
font-size: x-small;
}
.common-reference a {
text-decoration: none;
}
.common-copyright {
float: right;
font-size: x-small;
}
.common-copyright a {
text-decoration: none;
}
.md-list {
}
.md-list li {
line-height: 1.5em;
margin-bottom: 1em;
}
.md-list li p {
padding-left: 2em;
}
.md-list-compact {
}
.md-list-compact li {
margin-bottom: 0;
}
.md-list-none {
list-style-type: none;
padding-left: 2em;
}
.md-list-none li {
margin-bottom: 0;
}
@media screen and (max-width: 900px) {
.common-sidebar {
width: 100%;
white-space: normal;
}
.common-list {
padding-left: 0;
}
.common-list-data {
padding-left: 0;
}
.common-sidebar h4, .common-list li, .common-list-data li, .common-list-data-items li {
width: 130px;
float: left;
overflow: hidden;
vertical-align: top;
padding-right: 1em;
margin-top: 0;
}
.common-list-data-subitems {
display: none;
}
.common-main {
clear: both;
margin-left: 0;
padding-left: 0;
padding-right: 0;
}
.md-list-none {
padding-left: 1em;
}
}

View file

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp "&#160;"> <!ENTITY ne "&#8800;"> <!ENTITY le "&#8804;"> <!ENTITY ge "&#8805;">
<!ENTITY times "&#215;"> <!ENTITY sdot "&#8901;"> <!ENTITY divide "&#247;">
<!ENTITY copy "&#169;"> <!ENTITY Sigma "&#931;"> <!ENTITY sigma "&#963;"> <!ENTITY sum "&#8721;"> <!ENTITY lbrace "&#123;">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template name="commonStyles">
<meta charset="utf-8"/>
<link rel="apple-touch-icon" sizes="57x57" href="/versions/icons/current/pc-icon-57.png"/>
<link rel="apple-touch-icon" sizes="72x72" href="/versions/icons/current/pc-icon-72.png"/>
<link rel="apple-touch-icon" sizes="76x76" href="/versions/icons/current/pc-icon-76.png"/>
<link rel="apple-touch-icon" sizes="114x114" href="/versions/icons/current/pc-icon-114.png"/>
<link rel="apple-touch-icon" sizes="120x120" href="/versions/icons/current/pc-icon-120.png"/>
<link rel="apple-touch-icon" sizes="144x144" href="/versions/icons/current/pc-icon-144.png"/>
<link rel="apple-touch-icon" sizes="152x152" href="/versions/icons/current/pc-icon-152.png"/>
<link rel="apple-touch-icon" sizes="180x180" href="/versions/icons/current/pc-icon-180.png"/>
<link rel="apple-touch-icon" sizes="192x192" href="/versions/icons/current/pc-icon-192.png"/>
<link rel="apple-touch-icon" href="/versions/icons/current/apple-touch-icon.png"/>
<link rel="icon" type="image/png" sizes="192x192" href="/versions/icons/current/pc-icon-192.png"/>
<link rel="shortcut icon" type="image/x-icon" href="/versions/icons/current/favicon.ico"/>
<link rel="stylesheet" type="text/css" href="/versions/c1pjs/1.34.1/common.css"/>
</xsl:template>
<xsl:template name="commonTop">
<div class="common-top">
<div class="common-top-left">
<ul>
<li><a href="/">PCjs</a></li>
<li><a href="/devices/">Devices</a></li>
<li><a href="/docs/">Docs</a></li>
<li><a href="/apps/">Software</a></li>
<li><a href="/docs/about/">About</a></li>
</ul>
</div>
<div class="common-top-right">
<p>Powered by <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript">JavaScript</a>, <a href="http://vanilla-js.com/" target="_blank">Vanilla JS</a>, and <a href="http://github.com/jeffpar/pcjs" target="_blank">GitHub</a></p>
</div>
</div>
</xsl:template>
<xsl:template name="commonBottom">
<div class="common-bottom">
<p class="common-reference"></p>
<p class="common-copyright">
<span class="common-copyright"><a href="http://www.pcjs.org/">pcjs.org</a> © 2012-2017 by <a href="http://twitter.com/jeffpar">@jeffpar</a></span><br/>
<span class="common-copyright"><a href="http://github.com/jeffpar/pcjs">PCjs Project</a> released under <a href="http://gnu.org/licenses/gpl.html">GPLv3</a></span>
</p>
</div>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,108 @@
@CHARSET "UTF-8";
*:not(input,textarea) {
-webkit-user-select: none;
}
.c1pjs-embed {
}
.c1pjs-embed:after {
clear:both;
}
.c1pjs-machine {
}
.c1pjs-name {
clear: both;
font-weight: bold;
padding-bottom: 4px;
}
.c1pjs-canvas {
width: 100%;
height: auto;
}
.c1pjs-container {
color: #000000;
position: relative;
}
.c1pjs-label {
font-size: small;
line-height: 19px;
vertical-align: middle;
float: left;
font-family: "Lucida Console", monospace;
}
.c1pjs-control textarea {
font-family: Monaco, monospace;
font-size: x-small;
}
.c1pjs-fieldset {
border: none;
margin: 0;
padding: 0;
}
.c1pjs-flag {
font-family: "Lucida Console", monospace;
font-size: small;
text-align: center;
line-height: 19px;
vertical-align: middle;
}
.c1pjs-register {
font-family: "Lucida Console", monospace;
font-size: small;
text-align: center;
line-height: 19px;
vertical-align: middle;
border: 1px solid black;
}
.c1pjs-switches {
float: left;
}
.c1pjs-bitBucket {
float: left;
width: 19px;
height: 38px;
}
.c1pjs-bitCell {
float: left;
width: 19px;
height: 19px;
margin-right: -1px;
margin-bottom: -1px;
border: 1px solid black;
text-align: center;
line-height: 19px;
}
.c1pjs-bitCellLeft {
border-left: 1px solid black;
}
.c1pjs-bitLabel {
font-size: xx-small;
text-align: center;
}
.c1pjs-description, .c1pjs-status {
font-size: small;
line-height: 2em;
}
.c1pjs-key {
border: 1px solid black;
font-size: x-small;
text-align: center;
position: absolute;
height: 34px;
line-height: 34px;
}
.c1pjs-reference {
float: left;
font-size: x-small;
}
.c1pjs-reference a {
text-decoration: none;
}
.c1pjs-copyright {
float: right;
font-size: x-small;
}
.c1pjs-copyright a {
text-decoration: none;
}

View file

@ -0,0 +1,588 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2013-01-29" license="http://www.gnu.org/licenses/gpl.html" -->
<!DOCTYPE xsl:stylesheet [
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:param name="rootDir" select="''"/>
<xsl:param name="generator" select="'client'"/>
<xsl:variable name="MACHINETYPE">c1p</xsl:variable>
<xsl:variable name="APPCLASS">c1pjs</xsl:variable>
<xsl:variable name="APPVERSION">1.34.1</xsl:variable>
<xsl:variable name="SITEHOST">www.pcjs.org</xsl:variable>
<xsl:template name="componentStyles">
<link rel="stylesheet" type="text/css" href="/versions/{$APPCLASS}/{$APPVERSION}/components.css"/>
</xsl:template>
<xsl:template name="componentScripts">
<xsl:param name="component"/>
<script type="text/javascript" src="/versions/{$APPCLASS}/{$APPVERSION}/{$component}.js"> </script>
</xsl:template>
<xsl:template name="componentIncludes">
<xsl:param name="component"/>
<xsl:call-template name="componentScripts"><xsl:with-param name="component" select="$component"/></xsl:call-template>
</xsl:template>
<xsl:template match="machine[@ref]">
<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($componentFile)/machine"><xsl:with-param name="machine" select="@id"/></xsl:apply-templates>
</xsl:template>
<xsl:template match="machine[not(@ref)]">
<xsl:param name="machine"><xsl:value-of select="@id"/></xsl:param>
<div id="{$machine}" class="machine {@class}js">
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="component" select="'machine'"/>
<xsl:with-param name="class"><xsl:value-of select="@class"/>js</xsl:with-param>
<xsl:with-param name="parms"><xsl:if test="@parms">,<xsl:value-of select="@parms"/></xsl:if></xsl:with-param>
<xsl:with-param name="url"><xsl:value-of select="@url"/></xsl:with-param>
</xsl:call-template>
</div>
</xsl:template>
<xsl:template match="component[@ref]">
<xsl:param name="machine"/>
<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($componentFile)/component"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
</xsl:template>
<xsl:template match="component[not(@ref)]">
<xsl:param name="machine"/>
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class" select="@class"/>
<xsl:with-param name="parms"><xsl:if test="@parms">,<xsl:value-of select="@parms"/></xsl:if></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="component">
<xsl:param name="machine" select="''"/>
<xsl:param name="component" select="name(.)"/>
<xsl:param name="class" select="''"/>
<xsl:param name="parms" select="''"/>
<xsl:param name="url" select="''"/>
<xsl:variable name="id">
<xsl:choose>
<xsl:when test="$component = 'machine'"><xsl:value-of select="$machine"/>.machine</xsl:when>
<xsl:when test="$machine != ''"><xsl:value-of select="$machine"/><xsl:if test="@id">.<xsl:value-of select="@id"/></xsl:if></xsl:when>
<xsl:when test="@id"><xsl:value-of select="@id"/></xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="name">
<xsl:choose>
<xsl:when test="name"><xsl:value-of select="name"/></xsl:when>
<xsl:when test="@name"><xsl:value-of select="@name"/></xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="border">
<xsl:choose>
<xsl:when test="@border = '1'">border:1px solid black;border-radius:10px;</xsl:when>
<xsl:when test="@border">border:<xsl:value-of select="@border"/>;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="left">
<xsl:choose>
<xsl:when test="@left">left:<xsl:value-of select="@left"/>;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="top">
<xsl:choose>
<xsl:when test="@top">top:<xsl:value-of select="@top"/>;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="width">
<xsl:choose>
<xsl:when test="@width">
<xsl:choose>
<xsl:when test="$left != '' or $top != ''">width:<xsl:value-of select="@width"/>;</xsl:when>
<xsl:otherwise>width:auto;max-width:<xsl:value-of select="@width"/>;</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="height">
<xsl:choose>
<xsl:when test="@height">height:<xsl:value-of select="@height"/>;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="padding">
<xsl:choose>
<xsl:when test="@padding">padding:<xsl:value-of select="@padding"/>;</xsl:when>
<xsl:otherwise>
<xsl:if test="@padTop">padding-top:<xsl:value-of select="@padTop"/>;</xsl:if>
<xsl:if test="@padRight">padding-right:<xsl:value-of select="@padRight"/>;</xsl:if>
<xsl:if test="@padBottom">padding-bottom:<xsl:value-of select="@padBottom"/>;</xsl:if>
<xsl:if test="@padLeft">padding-left:<xsl:value-of select="@padLeft"/>;</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="pos">
<xsl:choose>
<xsl:when test="@pos = 'left'">float:left;</xsl:when>
<xsl:when test="@pos = 'right'">float:right;</xsl:when>
<xsl:when test="@pos = 'center'">margin:0 auto;</xsl:when>
<xsl:when test="@pos">position:<xsl:value-of select="@pos"/>;</xsl:when>
<xsl:when test="$left != '' or $top != ''">position:absolute;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="style">
<xsl:if test="$component = 'machine'">overflow:auto;width:100%;</xsl:if>
<xsl:if test="@background">background-color:<xsl:value-of select="@background"/>;</xsl:if>
<xsl:if test="@style"><xsl:value-of select="@style"/></xsl:if>
</xsl:variable>
<xsl:variable name="componentClass">
<xsl:value-of select="$APPCLASS"/><xsl:text>-</xsl:text><xsl:value-of select="$component"/><xsl:text> </xsl:text><xsl:value-of select="$APPCLASS"/><xsl:text>-component</xsl:text>
</xsl:variable>
<div id="{$id}" class="{$componentClass}" style="{$width}{$height}{$pos}{$left}{$top}{$padding}">
<xsl:if test="$component = 'machine'">
<xsl:apply-templates select="name" mode="machine"/>
</xsl:if>
<xsl:if test="$component != 'machine'">
<xsl:apply-templates select="name" mode="component"/>
</xsl:if>
<div class="{$APPCLASS}-container" style="{$border}{$style}">
<xsl:if test="$class != '' and $component != 'machine'">
<div class="{$APPCLASS}-{$class}-object" data-value="{{id:'{$id}',name:'{$name}'{$parms}}}"> </div>
</xsl:if>
<xsl:if test="control">
<div class="{$APPCLASS}-controls">
<xsl:apply-templates select="control" mode="component"/>
</div>
</xsl:if>
<xsl:apply-templates><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
</div>
<xsl:if test="$component = 'machine'">
<xsl:choose>
<xsl:when test="$url != ''"><div class="{$APPCLASS}-reference">[<a href="{$url}">XML</a>]</div></xsl:when>
<xsl:otherwise/>
</xsl:choose>
<div class="{$APPCLASS}-copyright">
<a href="http://{$SITEHOST}/{$APPCLASS}" target="_blank">C1Pjs</a> v<xsl:value-of select="$APPVERSION"/> © 2012-2017 by <a href="http://twitter.com/jeffpar" target="_blank">@jeffpar</a>
</div>
<div style="clear:both"> </div>
</xsl:if>
</div>
</xsl:template>
<xsl:template match="name" mode="machine">
<xsl:variable name="pos">
<xsl:choose>
<xsl:when test="@pos = 'center'">text-align:center;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<h3 style="{$pos}"><xsl:apply-templates/></h3>
</xsl:template>
<xsl:template match="name" mode="component">
<div class="{$APPCLASS}-name"><xsl:apply-templates/></div>
</xsl:template>
<xsl:template match="control" mode="component">
<xsl:variable name="type">
type:'<xsl:value-of select="@type"/>'
</xsl:variable>
<xsl:variable name="binding">
binding:'<xsl:value-of select="@binding"/>'
</xsl:variable>
<xsl:variable name="border">
<xsl:choose>
<xsl:when test="@border = '1'">border:1px solid black;</xsl:when>
<xsl:when test="@border">border:<xsl:value-of select="@border"/>;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="width">
<xsl:choose>
<xsl:when test="@width">width:<xsl:value-of select="@width"/>;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="height">
<xsl:choose>
<xsl:when test="@height">height:<xsl:value-of select="@height"/>;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="left">
<xsl:choose>
<xsl:when test="@left">left:<xsl:value-of select="@left"/>;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="top">
<xsl:choose>
<xsl:when test="@top">top:<xsl:value-of select="@top"/>;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="pos">
<xsl:choose>
<xsl:when test="$left != '' or $top != ''">position:absolute;</xsl:when>
<xsl:when test="@pos = 'left'">float:left;</xsl:when>
<xsl:when test="@pos = 'right'">float:right;</xsl:when>
<xsl:when test="@pos = 'center'">margin:0 auto;</xsl:when>
<xsl:when test="@pos"><xsl:value-of select="@pos"/>;</xsl:when>
<xsl:otherwise><xsl:if test="$left = ''">float:left;</xsl:if></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="style">
<xsl:choose>
<xsl:when test="@style"><xsl:value-of select="@style"/></xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<div class="{$APPCLASS}-control" style="{$pos}{$left}{$top}">
<xsl:variable name="fontsize">
<xsl:choose>
<xsl:when test="@size = 'large'">font-size:<xsl:value-of select="@size"/>;</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="subclass">
<xsl:if test="@label"><xsl:text> </xsl:text><xsl:value-of select="$APPCLASS"/><xsl:text>-label</xsl:text></xsl:if>
</xsl:variable>
<xsl:variable name="labelwidth">
<xsl:if test="@labelwidth">width:<xsl:value-of select="@labelwidth"/>;</xsl:if>
</xsl:variable>
<xsl:variable name="labelstyle">
<xsl:if test="@labelstyle"><xsl:value-of select="@labelstyle"/></xsl:if>
</xsl:variable>
<xsl:if test="@label">
<xsl:if test="not(@labelpos) or @labelpos = 'left'">
<div class="{$APPCLASS}-label" style="{$labelwidth}{$labelstyle}"><xsl:value-of select="@label"/></div>
</xsl:if>
</xsl:if>
<xsl:choose>
<xsl:when test="@type = 'button'">
<button class="{$APPCLASS}-binding" style="{$border}{$width}{$height}{$fontsize}{$style}" data-value="{{{$type},{$binding}}}"><xsl:apply-templates/></button>
</xsl:when>
<xsl:when test="@type = 'list'">
<select class="{$APPCLASS}-binding" style="{$border}{$width}{$height}{$fontsize}{$style}" data-value="{{{$type},{$binding}}}">
<xsl:apply-templates select="item" mode="component"/>
</select>
</xsl:when>
<xsl:when test="@type = 'text'">
<input class="{$APPCLASS}-binding" type="text" style="{$border}{$width}{$height}{$style}" data-value="{{{$type},{$binding}}}" value="" autocapitalize="off" autocorrect="off"/>
</xsl:when>
<xsl:when test="@type = 'submit'">
<input class="{$APPCLASS}-binding" type="submit" style="{$border}{$fontsize}{$style}" data-value="{{{$type},{$binding}}}" value="{.}"/>
</xsl:when>
<xsl:when test="@type = 'textarea'">
<textarea class="{$APPCLASS}-binding" style="{$border}{$width}{$height}{$style}" data-value="{{{$type},{$binding}}}" readonly="readonly"> </textarea>
</xsl:when>
<xsl:when test="@type = 'heading'">
<div><xsl:value-of select="."/></div>
</xsl:when>
<xsl:when test="@type = 'file'">
<form class="{$APPCLASS}-binding" style="{$border}{$width}{$height}{$style}" data-value="{{{$type},{$binding}}}">
<fieldset class="{$APPCLASS}-fieldset">
<input type="file"/>
<input type="submit" value="Mount" disabled="true"/>
</fieldset>
</form>
</xsl:when>
<xsl:when test="@type = 'separator'">
<hr/>
</xsl:when>
<xsl:when test="not(@type)">
<div style="clear:both"> </div><br/>
</xsl:when>
<xsl:otherwise>
<div class="{$APPCLASS}-binding{$subclass}" style="{$border}{$width}{$height}{$style}" data-value="{{{$type},{$binding}}}"><xsl:apply-templates/></div>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="@label">
<xsl:if test="@labelpos = 'right'">
<div class="{$APPCLASS}-label" style="{$labelwidth}{$labelstyle}"><xsl:value-of select="@label"/></div>
</xsl:if>
<div style="clear:both"> </div>
</xsl:if>
</div>
</xsl:template>
<xsl:template match="item" mode="component">
<option value="{@ref}"><xsl:value-of select="."/></option>
</xsl:template>
<xsl:template match="name">
</xsl:template>
<xsl:template match="control">
</xsl:template>
<xsl:template match="cpu[@ref]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($componentFile)/cpu"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
</xsl:template>
<xsl:template match="cpu[not(@ref)]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="autoStart">
<xsl:choose>
<xsl:when test="@autostart"><xsl:value-of select="@autostart"/></xsl:when>
<xsl:otherwise>null</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class" select="'cpu'"/>
<xsl:with-param name="parms">,autoStart:<xsl:value-of select="$autoStart"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="keyboard[@ref]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($componentFile)/keyboard"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
</xsl:template>
<xsl:template match="keyboard[not(@ref)]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="model">
<xsl:choose>
<xsl:when test="@model"><xsl:value-of select="@model"/></xsl:when>
<xsl:otherwise>600</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">keyboard</xsl:with-param>
<xsl:with-param name="parms">,model:<xsl:value-of select="$model"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="serial[@ref]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($componentFile)/serial"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
</xsl:template>
<xsl:template match="serial[not(@ref)]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="demo">
<xsl:choose>
<xsl:when test="@demo"><xsl:value-of select="@demo"/></xsl:when>
<xsl:otherwise>false</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">serial</xsl:with-param>
<xsl:with-param name="parms">,demo:<xsl:value-of select="$demo"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="disk[@ref]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($componentFile)/disk"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
</xsl:template>
<xsl:template match="disk[not(@ref)]">
<xsl:param name="machine" select="''"/>
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">disk</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="rom[@ref]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($componentFile)/rom"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
</xsl:template>
<xsl:template match="rom[not(@ref)]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="size">
<xsl:choose>
<xsl:when test="@size"><xsl:value-of select="@size"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="image">
<xsl:choose>
<xsl:when test="@image"><xsl:value-of select="@image"/></xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">rom</xsl:with-param>
<xsl:with-param name="parms">,size:<xsl:value-of select="$size"/>,image:'<xsl:value-of select="$image"/>'</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="ram[@ref]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($componentFile)/ram"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
</xsl:template>
<xsl:template match="ram[not(@ref)]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="size">
<xsl:choose>
<xsl:when test="@size"><xsl:value-of select="@size"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">ram</xsl:with-param>
<xsl:with-param name="parms">,size:<xsl:value-of select="$size"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="video[@ref]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($componentFile)/video"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
</xsl:template>
<xsl:template match="video[not(@ref)]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="model">
<xsl:choose>
<xsl:when test="@model"><xsl:value-of select="@model"/></xsl:when>
<xsl:otherwise>600</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="screenWidth">
<xsl:choose>
<xsl:when test="@screenwidth"><xsl:value-of select="@screenwidth"/></xsl:when>
<xsl:when test="@screenWidth"><xsl:value-of select="@screenWidth"/></xsl:when>
<xsl:otherwise>256</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="screenHeight">
<xsl:choose>
<xsl:when test="@screenheight"><xsl:value-of select="@screenheight"/></xsl:when>
<xsl:when test="@screenHeight"><xsl:value-of select="@screenHeight"/></xsl:when>
<xsl:otherwise>224</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="screenColor">
<xsl:choose>
<xsl:when test="@screencolor"><xsl:value-of select="@screencolor"/></xsl:when>
<xsl:when test="@screenColor"><xsl:value-of select="@screenColor"/></xsl:when>
<xsl:otherwise>black</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="charCols">
<xsl:choose>
<xsl:when test="@cols"><xsl:value-of select="@cols"/></xsl:when>
<xsl:otherwise>32</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="charRows">
<xsl:choose>
<xsl:when test="@rows"><xsl:value-of select="@rows"/></xsl:when>
<xsl:otherwise>32</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="charWidth">
<xsl:choose>
<xsl:when test="@charwidth"><xsl:value-of select="@charwidth"/></xsl:when>
<xsl:when test="@charWidth"><xsl:value-of select="@charWidth"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="charHeight">
<xsl:choose>
<xsl:when test="@charheight"><xsl:value-of select="@charheight"/></xsl:when>
<xsl:when test="@charHeight"><xsl:value-of select="@charHeight"/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="charSet">
<xsl:choose>
<xsl:when test="@charset"><xsl:value-of select="@charset"/></xsl:when>
<xsl:when test="@charSet"><xsl:value-of select="@charSet"/></xsl:when>
<xsl:when test="@fontROM"><xsl:value-of select="@fontROM"/></xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="smoothing">
<xsl:choose>
<xsl:when test="@smoothing"><xsl:value-of select="@smoothing"/></xsl:when>
<xsl:otherwise>null</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">video</xsl:with-param>
<xsl:with-param name="parms">,model:<xsl:value-of select="$model"/>,screenWidth:<xsl:value-of select="$screenWidth"/>,screenHeight:<xsl:value-of select="$screenHeight"/>,charCols:<xsl:value-of select="$charCols"/>,charRows:<xsl:value-of select="$charRows"/>,charWidth:<xsl:value-of select="$charWidth"/>,charHeight:<xsl:value-of select="$charHeight"/>,charSet:'<xsl:value-of select="$charSet"/>',screenColor:'<xsl:value-of select="$screenColor"/>',smoothing:<xsl:value-of select="$smoothing"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="debugger[@ref]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($componentFile)/debugger"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
</xsl:template>
<xsl:template match="debugger[not(@ref)]">
<xsl:param name="machine" select="''"/>
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">debugger</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="panel[@ref]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($componentFile)/panel"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
</xsl:template>
<xsl:template match="panel[not(@ref)]">
<xsl:param name="machine" select="''"/>
<xsl:call-template name="component">
<xsl:with-param name="machine" select="$machine"/>
<xsl:with-param name="class">panel</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="computer[@ref]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="componentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($componentFile)/computer"><xsl:with-param name="machine" select="$machine"/></xsl:apply-templates>
</xsl:template>
<xsl:template match="computer[not(@ref)]">
<xsl:param name="machine" select="''"/>
<xsl:variable name="modules">
[<xsl:for-each select="module">
{<xsl:call-template name="module"/>}
<xsl:if test="position() != last()">,</xsl:if>
</xsl:for-each>]
</xsl:variable>
<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">,modules:<xsl:value-of select="$modules"/></xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="module">
type:'<xsl:value-of select="@type"/>',refID:'<xsl:value-of select="@refid"/>'<xsl:if test="@start">,start:<xsl:value-of select="@start"/>,end:<xsl:value-of select="@end"/></xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,162 @@
@CHARSET "UTF-8";
.page {
margin: 2% 2%;
padding: 2% 2%;
min-width: 30em;
overflow: auto;
font-size: large;
font-family: Helvetica, Arial, sans-serif;
background: #303030;
color: #ccc;
}
.page-header {
}
.page-header-title {
text-align: center;
}
.page a {
color: #7fc07f;
text-decoration: none;
}
a.footlink, a.paralink {
text-decoration: none;
}
a.footlink:link, a.paralink:link {
color: blue;
}
a.footlink:visited, a.paralink:visited {
color: blue;
}
.galleryitem {
float: left;
width: 200px;
}
.item {
float: left;
width: 2em;
text-indent: 1em;
}
.list {
margin-left: 3em;
text-indent: 0;
text-align: justify;
}
ul {
list-style: none;
}
div.pnumber {
float: left;
width: 2em;
text-indent: 1em;
}
div.pitem {
margin-left: 10em;
}
p.indent, .justified p {
text-indent: 2em;
text-align: justify;
line-height: 1.5em;
}
p.noindent {
text-indent: 0;
text-align: justify;
}
p.center, .center {
text-align: center;
}
li.para {
margin-top: 1em;
margin-bottom: 1em;
}
.left {
text-align: left;
}
.right {
text-align: right;
}
blockquote.tag {
font-size: small;
font-family: Monaco, Fixed, monospace;
margin-top: 0;
margin-bottom: 0;
}
.blockquote {
padding-left: 1em;
text-indent: 0;
text-align: justify;
}
.italics {
font-style: italic;
}
.medium {
font-size: medium;
}
.small {
font-size: x-small;
}
.smallcaps {
font-variant: small-caps;
}
.strike {
text-decoration: line-through;
}
.summation, .bracelist {
display: inline-block;
position: relative;
vertical-align: middle;
text-align: center;
margin-bottom: 0.5ex;
text-indent: 0;
}
.bracelist-symbol {
font-size: 3em;
vertical-align: -40%;
}
.summation .summation-lower, .summation .summation-upper, .bracelist-item {
display: block;
font-size: 75%;
text-align: center;
}
.summation .summation-upper {
margin-bottom: 0;
margin-left: 0.8ex;
font-style: italic;
}
.summation .summation-lower{
margin-bottom: -0.6ex;
font-style: italic;
}
.summation .summation-symbol {
font-size: 2em;
}
p sup {
vertical-align: baseline;
position: relative;
bottom: .5em;
font-size: small;
}
p sub {
vertical-align: baseline;
position: relative;
bottom: -.5em;
font-size: small;
}
.footnote {
font-size: medium;
text-indent: 1em;
text-align: justify;
margin-top: .5em;
}
.image-right {
float: right;
margin-left: 1em;
margin-top: 1em;
margin-bottom: 1em;
}
.image-caption {
font-size: small;
text-align: center;
}

View file

@ -0,0 +1,452 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp "&#160;"> <!ENTITY ne "&#8800;"> <!ENTITY le "&#8804;"> <!ENTITY ge "&#8805;">
<!ENTITY times "&#215;"> <!ENTITY sdot "&#8901;"> <!ENTITY divide "&#247;">
<!ENTITY copy "&#169;"> <!ENTITY Sigma "&#931;"> <!ENTITY sigma "&#963;"> <!ENTITY sum "&#8721;"> <!ENTITY lbrace "&#123;">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template name="documentStyles">
<link rel="stylesheet" type="text/css" href="/versions/c1pjs/1.34.1/document.css"/>
</xsl:template>
<xsl:template match="title">
<h1><xsl:apply-templates/></h1>
</xsl:template>
<xsl:template name="p">
<xsl:if test="@id">
<a name="{@id}"></a>
</xsl:if>
<xsl:choose>
<xsl:when test="not(@class)">
<p><xsl:apply-templates/></p>
</xsl:when>
<xsl:otherwise>
<p class="{@class}"><xsl:apply-templates/></p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="p">
<xsl:call-template name="p"/>
</xsl:template>
<xsl:template match="br">
<br/>
</xsl:template>
<xsl:template match="p[@number]">
<div class="pnumber">
<xsl:choose>
<xsl:when test="not(@number) or @number = ''">&nbsp;</xsl:when>
<xsl:otherwise><xsl:value-of select="@number"/></xsl:otherwise>
</xsl:choose>
</div>
<div class="pitem">
<xsl:call-template name="p"/>
</div>
</xsl:template>
<xsl:template match="span">
<xsl:choose>
<xsl:when test="not(@class)">
<span><xsl:apply-templates/></span>
</xsl:when>
<xsl:when test="@class = 'italics'">
<em><xsl:apply-templates/></em>
</xsl:when>
<xsl:otherwise>
<span class="{@class}"><xsl:apply-templates/></span>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="h2">
<h2><xsl:apply-templates/></h2>
</xsl:template>
<xsl:template match="h3">
<h3><xsl:apply-templates/></h3>
</xsl:template>
<xsl:template match="h4">
<h4><xsl:apply-templates/></h4>
</xsl:template>
<xsl:template match="h5">
<h5><xsl:apply-templates/></h5>
</xsl:template>
<xsl:template match="h6">
<h6><xsl:apply-templates/></h6>
</xsl:template>
<xsl:template match="em">
<em><xsl:apply-templates/></em>
</xsl:template>
<xsl:template match="strong">
<strong><xsl:apply-templates/></strong>
</xsl:template>
<xsl:template match="a">
<a href="{@href}" target="{@target}"><xsl:apply-templates/></a>
</xsl:template>
<xsl:template match="ol">
<blockquote><ol><xsl:apply-templates/></ol></blockquote>
</xsl:template>
<xsl:template match="ul">
<blockquote><ul><xsl:apply-templates/></ul></blockquote>
</xsl:template>
<xsl:template match="li">
<li><xsl:apply-templates/></li>
</xsl:template>
<xsl:template match="img">
<div><img src="{@src}" alt="image"/></div>
</xsl:template>
<xsl:template match="pre">
<pre><xsl:apply-templates/></pre>
</xsl:template>
<xsl:template match="figure">
<xsl:choose>
<xsl:when test="@pos">
<div class="{@pos}"><img src="{@ref}" alt="{.}"/><br/><xsl:value-of select="."/></div>
</xsl:when>
<xsl:otherwise>
<div><img src="{@ref}" alt="{.}"/><br/><xsl:value-of select="."/></div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="sub">
<sub><xsl:apply-templates/></sub>
</xsl:template>
<xsl:template match="sup">
<sup><xsl:apply-templates/></sup>
</xsl:template>
<xsl:template match="lt">&lt;</xsl:template>
<xsl:template match="gt">&gt;</xsl:template>
<xsl:template match="ne">&ne;</xsl:template>
<xsl:template match="le">&le;</xsl:template>
<xsl:template match="ge">&ge;</xsl:template>
<xsl:template match="times">&times;</xsl:template>
<xsl:template match="dot">&sdot;</xsl:template>
<xsl:template match="divide">&divide;</xsl:template>
<xsl:template match="sigma">&sigma;</xsl:template>
<xsl:template match="summation">
<span class="summation">
<span class="summation-upper"><xsl:value-of select="@upper"/></span>
<span class="summation-symbol">&sum;</span>
<span class="summation-lower"><xsl:value-of select="@lower"/></span>
</span>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="bracelist">
<span class="bracelist-symbol">&lbrace;</span>
<span class="bracelist">
<xsl:for-each select="item">
<span class="bracelist-item"><xsl:apply-templates/></span>
</xsl:for-each>
</span>
</xsl:template>
<xsl:template match="footlink">
<xsl:variable name="docID" select="/document/@id"/>
<a class="footlink" id="fn{$docID}_ref{@n}" href="#fn{$docID}_{@n}"><sup><xsl:if test="@quoted"><xsl:text>[</xsl:text></xsl:if><xsl:value-of select="@n"/><xsl:if test="@quoted"><xsl:text>]</xsl:text></xsl:if></sup></a>
</xsl:template>
<xsl:template match="footnote">
<xsl:variable name="docID" select="/document/@id"/>
<div class="footnote"><a id="fn{$docID}_{@n}" href="#fn{$docID}_ref{@n}"><sup><xsl:value-of select="@n"/></sup></a><xsl:text> </xsl:text>
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template name="authors">
<xsl:for-each select="author"><xsl:if test="position() != 1"><xsl:text>, </xsl:text></xsl:if><xsl:if test="position() != 1 and position() = last()"><xsl:text>and </xsl:text></xsl:if><xsl:value-of select="."/></xsl:for-each>
</xsl:template>
<xsl:template name="formatDate">
<xsl:param name="date"/>
<xsl:param name="format">MDY</xsl:param>
<xsl:variable name="year">
<xsl:value-of select="substring-before($date,'-')"/>
</xsl:variable>
<xsl:variable name="mon-day">
<xsl:value-of select="substring-after($date,'-')"/>
</xsl:variable>
<xsl:variable name="mon">
<xsl:value-of select="substring-before($mon-day,'-')"/>
</xsl:variable>
<xsl:variable name="full-day">
<xsl:value-of select="substring-after($mon-day,'-')"/>
</xsl:variable>
<xsl:variable name="day">
<xsl:choose>
<xsl:when test="substring($full-day,1,1) = '0'"><xsl:value-of select="substring($full-day,2)"/></xsl:when>
<xsl:otherwise><xsl:value-of select="$full-day"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="$mon = '01'">January </xsl:when>
<xsl:when test="$mon = '02'">February </xsl:when>
<xsl:when test="$mon = '03'">March </xsl:when>
<xsl:when test="$mon = '04'">April </xsl:when>
<xsl:when test="$mon = '05'">May </xsl:when>
<xsl:when test="$mon = '06'">June </xsl:when>
<xsl:when test="$mon = '07'">July </xsl:when>
<xsl:when test="$mon = '08'">August </xsl:when>
<xsl:when test="$mon = '09'">September </xsl:when>
<xsl:when test="$mon = '10'">October </xsl:when>
<xsl:when test="$mon = '11'">November </xsl:when>
<xsl:when test="$mon = '12'">December </xsl:when>
<xsl:when test="$mon = '00'"/> </xsl:choose>
<xsl:if test="$day != '0' and $format = 'MDY'">
<xsl:value-of select="$day"/><xsl:text>, </xsl:text>
</xsl:if>
<xsl:value-of select="$year"/>
</xsl:template>
<xsl:template match="gallery">
<h2><xsl:value-of select="description"/></h2>
<div class="gallery">
<xsl:apply-templates select="item" mode="gallery"/>
</div>
<div style="clear:both;"></div>
</xsl:template>
<xsl:template match="item" mode="gallery">
<div class="galleryitem">
<a href="{@ref}"><img src="/versions/images/current/pdf-192.jpg" alt="{.}"/></a><br/>
<div style="font-size:small; text-align:center;"><xsl:value-of select="."/></div>
</div>
</xsl:template>
<xsl:template match="list[@type = 'timeline']">
<xsl:if test="not(description)">
<h2>Timeline</h2>
</xsl:if>
<xsl:if test="description">
<h2><xsl:value-of select="description"/></h2>
</xsl:if>
<blockquote>
<xsl:apply-templates select="item" mode="timeline"/>
</blockquote>
</xsl:template>
<xsl:template match="item" mode="timeline">
<xsl:if test="@ref">
<xsl:variable name="documentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($documentFile)/document" mode="withDate">
<xsl:with-param name="itemRef" select="@ref"/>
</xsl:apply-templates>
</xsl:if>
<xsl:if test="not(@ref)">
<h3><xsl:call-template name="formatDate"><xsl:with-param name="date" select="@date"/></xsl:call-template></h3>
<blockquote>
<xsl:value-of select="."/>
</blockquote>
</xsl:if>
</xsl:template>
<xsl:template match="list[@type = 'people']">
<xsl:if test="not(description)">
<h2>People</h2>
</xsl:if>
<xsl:if test="description">
<h2><xsl:value-of select="description"/></h2>
</xsl:if>
<blockquote>
<xsl:apply-templates select="item" mode="people"/>
</blockquote>
</xsl:template>
<xsl:template match="item" mode="people">
<h3><xsl:value-of select="name"/></h3>
<xsl:apply-templates select="list"/>
</xsl:template>
<xsl:template match="list[@type = 'documents']">
<xsl:if test="description"><h2><xsl:value-of select="description"/></h2></xsl:if>
<ul>
<xsl:apply-templates select="item" mode="document"/>
</ul>
</xsl:template>
<xsl:template match="item" mode="document">
<xsl:variable name="documentFile"><xsl:value-of select="$rootDir"/><xsl:value-of select="@ref"/></xsl:variable>
<xsl:apply-templates select="document($documentFile)/document">
<xsl:with-param name="itemRef" select="@ref"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="document">
<xsl:param name="itemRef"/>
<li>
<xsl:call-template name="documentSummary"><xsl:with-param name="itemRef" select="$itemRef"/></xsl:call-template>
</li>
</xsl:template>
<xsl:template match="document" mode="withDate">
<xsl:param name="itemRef"/>
<h3><xsl:call-template name="formatDate"><xsl:with-param name="date" select="date"/><xsl:with-param name="format" select="MY"/></xsl:call-template></h3>
<blockquote>
<p>
<xsl:call-template name="documentSummary"><xsl:with-param name="itemRef" select="$itemRef"/><xsl:with-param name="multiLine" select="'true'"/></xsl:call-template>
</p>
</blockquote>
</xsl:template>
<xsl:template name="documentSummary">
<xsl:param name="itemRef"/>
<xsl:param name="multiLine">false</xsl:param>
<xsl:choose>
<xsl:when test="content|include">
<a href="{$itemRef}"><xsl:value-of select="title"/></a>
<xsl:if test="@ref">
<span class="small">
<xsl:text> [</xsl:text><a href="{@ref}">Original</a><xsl:text>]</xsl:text>
</span>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<a href="{$itemRef}"><xsl:value-of select="title"/></a>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="copy">
<span class="small">
<xsl:text> [</xsl:text><a href="{copy/@ref}"><xsl:value-of select="copy"/></a><xsl:text>]</xsl:text>
</span>
</xsl:if>
<xsl:if test="author"><xsl:if test="$multiLine = 'true'"><br/></xsl:if><span class="medium"><xsl:text> by </xsl:text><xsl:call-template name="authors"/></span></xsl:if>
<xsl:if test="source">
<span class="small">
<br/>
<xsl:text>[Source: </xsl:text>
<xsl:if test="site">
<a href="{site/@url}"><xsl:value-of select="site"/></a>
</xsl:if>
<xsl:if test="not(site)">
<a href="{source/@url}"><xsl:value-of select="source"/></a>
</xsl:if>
<xsl:text>]</xsl:text>
</span>
</xsl:if>
</xsl:template>
<xsl:template match="list[@type = 'resources']">
<xsl:if test="not(description)">
<h2>Resources</h2>
</xsl:if>
<xsl:if test="description">
<h2><xsl:value-of select="description"/></h2>
</xsl:if>
<blockquote>
<xsl:apply-templates select="item" mode="resources"/>
</blockquote>
</xsl:template>
<xsl:template match="item" mode="resources">
<h3><xsl:value-of select="description"/></h3>
<xsl:apply-templates select="list"/>
</xsl:template>
<xsl:template match="list[@type = 'links']">
<xsl:if test="description">
<h4><xsl:value-of select="description"/></h4>
</xsl:if>
<ul>
<xsl:apply-templates select="item" mode="links"/>
</ul>
</xsl:template>
<xsl:template match="item" mode="links">
<li><a href="{@ref}"><xsl:value-of select="."/></a></li>
</xsl:template>
<xsl:template match="list[not(@type)]">
<xsl:if test="description">
<h2><xsl:value-of select="description"/></h2>
</xsl:if>
<blockquote>
<xsl:apply-templates select="item|tag" mode="outer"/>
</blockquote>
</xsl:template>
<xsl:template match="item" mode="outer">
<xsl:if test="description">
<h3><xsl:value-of select="description"/></h3>
</xsl:if>
<xsl:apply-templates select="list|item|tag" mode="inner"/>
</xsl:template>
<xsl:template match="list" mode="inner">
<xsl:if test="description">
<h4><xsl:value-of select="description"/></h4>
</xsl:if>
<ul>
<xsl:apply-templates select="list|item|para|tag" mode="inner"/>
</ul>
</xsl:template>
<xsl:template name="innerlist">
<xsl:if test="description">
<xsl:value-of select="description"/>
</xsl:if>
<ul>
<xsl:apply-templates select="list|item|para|tag" mode="inner"/>
</ul>
</xsl:template>
<xsl:template match="item" mode="inner">
<xsl:choose>
<xsl:when test="@ref">
<li><a href="{@ref}"><xsl:apply-templates/></a></li>
</xsl:when>
<xsl:when test="description">
<li><xsl:call-template name="innerlist"/></li>
</xsl:when>
<xsl:otherwise>
<li><xsl:apply-templates/></li>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="para" mode="inner">
<li class="para"><xsl:apply-templates/></li>
</xsl:template>
<xsl:template match="tag" mode="outer">
<xsl:call-template name="tag"/>
</xsl:template>
<xsl:template match="tag" mode="inner">
<xsl:call-template name="tag"/>
</xsl:template>
<xsl:template name="tag">
<blockquote class="tag">
<xsl:text>&lt;</xsl:text><xsl:if test="@href"><a href="{@href}"><xsl:value-of select="@name"/></a></xsl:if><xsl:if test="not(@href)"><xsl:value-of select="@name"/></xsl:if><xsl:for-each select="attr"><xsl:text> </xsl:text><xsl:value-of select="@name"/><xsl:text>="</xsl:text><xsl:value-of select="@value"/><xsl:text>"</xsl:text></xsl:for-each>
<xsl:choose>
<xsl:when test="tag"><xsl:text>&gt;</xsl:text><xsl:apply-templates mode="inner"/><xsl:text>&lt;/</xsl:text><xsl:value-of select="@name"/><xsl:text>&gt;</xsl:text></xsl:when>
<xsl:when test="normalize-space(.) != ''"><xsl:text>&gt;</xsl:text><xsl:value-of select="."/><xsl:text>&lt;/</xsl:text><xsl:value-of select="@name"/><xsl:text>&gt;</xsl:text></xsl:when>
<xsl:otherwise><xsl:text>/&gt;</xsl:text></xsl:otherwise>
</xsl:choose>
</blockquote>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp "&#160;"> <!ENTITY sect "&#167;"> <!ENTITY copy "&#169;"> <!ENTITY para "&#182;"> <!ENTITY ndash "&#8211;"> <!ENTITY mdash "&#8212;">
<!ENTITY lsquo "&#8216;"> <!ENTITY rsquo "&#8217;"> <!ENTITY ldquo "&#8220;"> <!ENTITY rdquo "&#8221;"> <!ENTITY dagger "&#8224;"> <!ENTITY Dagger "&#8225;">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output doctype-system="about:legacy-compat" method="html"/>
<xsl:include href="/versions/c1pjs/1.34.1/common.xsl"/>
<xsl:include href="/versions/c1pjs/1.34.1/components.xsl"/>
<xsl:template match="/machine">
<xsl:variable name="machineType">
<xsl:choose>
<xsl:when test="@type"><xsl:value-of select="@type"/></xsl:when>
<xsl:otherwise><xsl:value-of select="@class"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="machineClass">
<xsl:choose>
<xsl:when test="@class = 'pc' or @class = 'c1p'"><xsl:value-of select="@class"/>js</xsl:when>
<xsl:otherwise><xsl:value-of select="@class"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<html lang="en">
<head>
<title><xsl:value-of select="$SITEHOST"/></title>
<xsl:call-template name="commonStyles"/>
<xsl:call-template name="componentStyles"/>
</head>
<body>
<div class="common">
<xsl:call-template name="commonTop"/>
<div class="common-middle">
<p></p>
<div id="{@id}" class="machine {$machineType} {$machineClass}">
<xsl:call-template name="component">
<xsl:with-param name="machine" select="@id"/>
<xsl:with-param name="component" select="'machine'"/>
<xsl:with-param name="class" select="$machineClass"/>
<xsl:with-param name="parms"><xsl:if test="@parms">,<xsl:value-of select="@parms"/></xsl:if></xsl:with-param>
</xsl:call-template>
</div>
</div>
<xsl:call-template name="commonBottom"/>
</div>
<xsl:call-template name="componentScripts">
<xsl:with-param name="component">
<xsl:choose>
<xsl:when test="debugger"><xsl:value-of select="$machineType"/>-dbg</xsl:when>
<xsl:otherwise><xsl:value-of select="$machineType"/></xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,247 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2014-04-10" modified="2014-04-10" license="http://www.gnu.org/licenses/gpl.html" -->
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp "&#160;"> <!ENTITY sect "&#167;"> <!ENTITY copy "&#169;"> <!ENTITY para "&#182;"> <!ENTITY ndash "&#8211;"> <!ENTITY mdash "&#8212;">
<!ENTITY lsquo "&#8216;"> <!ENTITY rsquo "&#8217;"> <!ENTITY ldquo "&#8220;"> <!ENTITY rdquo "&#8221;"> <!ENTITY dagger "&#8224;"> <!ENTITY Dagger "&#8225;">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output doctype-system="about:legacy-compat" method="html"/>
<xsl:include href="/versions/c1pjs/1.34.1/common.xsl"/>
<xsl:include href="/versions/c1pjs/1.34.1/components.xsl"/>
<xsl:template match="/manifest[@type = 'document']">
<html lang="en">
<head>
<title><xsl:value-of select="$SITEHOST"/></title>
<xsl:call-template name="commonStyles"/>
<xsl:call-template name="componentStyles"/>
</head>
<body>
<div class="common">
<xsl:call-template name="commonTop"/>
<div class="common-middle">
<h4>Document Manifest</h4>
<div class="common-sidebar">
<ul class="common-list-data">
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Title'"/>
<xsl:with-param name="node" select="title"/>
<xsl:with-param name="default">None</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Version'"/>
<xsl:with-param name="node" select="version"/>
<xsl:with-param name="default" select="''"/>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Source'"/>
<xsl:with-param name="node" select="source"/>
<xsl:with-param name="default" select="''"/>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Documents'"/>
<xsl:with-param name="node" select="document"/>
<xsl:with-param name="default"><xsl:value-of select="title"/> <xsl:if test="version != ''"><xsl:text> </xsl:text><xsl:value-of select="version"/></xsl:if></xsl:with-param>
</xsl:call-template>
</ul>
</div>
<div class="common-main">
<p><xsl:value-of select="desc"/></p>
<xsl:call-template name="commonBottom"/>
</div>
</div>
</div>
</body>
</html>
</xsl:template>
<xsl:template match="/manifest[@type = 'software' or not(@type)]">
<xsl:variable name="machineClass">
<xsl:choose>
<xsl:when test="machine/@class"><xsl:value-of select="machine/@class"/></xsl:when>
<xsl:otherwise><xsl:value-of select="$APPCLASS"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<html lang="en">
<head>
<title><xsl:value-of select="$SITEHOST"/></title>
<xsl:call-template name="commonStyles"/>
<xsl:call-template name="componentStyles"/>
</head>
<body>
<div class="common">
<xsl:call-template name="commonTop"/>
<div class="common-middle">
<h4>Software Manifest</h4>
<div class="common-sidebar">
<ul class="common-list-data">
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Title'"/>
<xsl:with-param name="node" select="title"/>
<xsl:with-param name="default">None</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Version'"/>
<xsl:with-param name="node" select="version"/>
<xsl:with-param name="default">Unknown</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Type'"/>
<xsl:with-param name="node" select="type"/>
<xsl:with-param name="default">None</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Category'"/>
<xsl:with-param name="node" select="category"/>
<xsl:with-param name="default">None</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Created'"/>
<xsl:with-param name="node" select="creationDate"/>
<xsl:with-param name="default" select="''"/>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Creators'"/>
<xsl:with-param name="node" select="creator"/>
<xsl:with-param name="default" select="''"/>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label"><xsl:if test="creationDate">Updated</xsl:if><xsl:if test="not(creationDate)">Released</xsl:if></xsl:with-param>
<xsl:with-param name="node" select="releaseDate"/>
<xsl:with-param name="default">Unknown</xsl:with-param>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Company'"/>
<xsl:with-param name="node" select="company"/>
<xsl:with-param name="default" select="''"/>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Authors'"/>
<xsl:with-param name="node" select="author"/>
<xsl:with-param name="default" select="''"/>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Contributors'"/>
<xsl:with-param name="node" select="contributor"/>
<xsl:with-param name="default" select="''"/>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Publisher'"/>
<xsl:with-param name="node" select="publisher"/>
<xsl:with-param name="default" select="''"/>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'License'"/>
<xsl:with-param name="node" select="license"/>
<xsl:with-param name="default" select="''"/>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Source'"/>
<xsl:with-param name="node" select="source"/>
<xsl:with-param name="default" select="''"/>
</xsl:call-template>
<xsl:call-template name="listItem">
<xsl:with-param name="label" select="'Disks'"/>
<xsl:with-param name="node" select="disk"/>
<xsl:with-param name="default"><xsl:value-of select="title"/> <xsl:if test="version != ''"><xsl:text> </xsl:text><xsl:value-of select="version"/></xsl:if></xsl:with-param>
</xsl:call-template>
</ul>
</div>
<div class="common-main">
<xsl:for-each select="machine[not(@type) or @type = 'default']">
<xsl:call-template name="machine">
<xsl:with-param name="href" select="@href"/>
<xsl:with-param name="state" select="@state"/>
</xsl:call-template>
</xsl:for-each>
<xsl:if test="not(machine[not(@type) or @type = 'default'])">
<p>No default machine specified for '<xsl:value-of select="title"/>' in manifest.xml</p>
</xsl:if>
<xsl:call-template name="commonBottom"/>
</div>
</div>
</div>
<xsl:call-template name="componentScripts">
<xsl:with-param name="component">
<xsl:choose>
<xsl:when test="machine/@debugger"><xsl:value-of select="$machineClass"/>-dbg</xsl:when>
<xsl:otherwise><xsl:value-of select="$machineClass"/></xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</body>
</html>
</xsl:template>
<xsl:template name="listItem">
<xsl:param name="label"/>
<xsl:param name="node"/>
<xsl:param name="default">Unknown</xsl:param>
<xsl:if test="$node != '' or $default != ''">
<li><xsl:value-of select="$label"/>
<ul class="common-list-data-items">
<xsl:for-each select="$node">
<xsl:variable name="desc">
<xsl:choose>
<xsl:when test="desc"><xsl:value-of select="desc"/></xsl:when>
<xsl:when test="org"><xsl:value-of select="org"/></xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:variable>
<li title="{$desc}">
<xsl:variable name="value">
<xsl:choose>
<xsl:when test="name">
<xsl:value-of select="name"/>
</xsl:when>
<xsl:when test="normalize-space(./text()) != ''">
<xsl:value-of select="normalize-space(./text())"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$default"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="href">
<xsl:if test="@href"><xsl:value-of select="@href"/></xsl:if>
</xsl:variable>
<xsl:choose>
<xsl:when test="$href != ''">
<a href="{$href}"><xsl:value-of select="$value"/></a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$value"/>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="page">
<ul class="common-list-data-subitems">
<xsl:for-each select="page">
<li>
<xsl:if test="@href">
<a href="{$href}{@href}"><xsl:value-of select="."/></a>
</xsl:if>
<xsl:if test="not(@href)">
<xsl:value-of select="."/>
</xsl:if>
</li>
</xsl:for-each>
</ul>
</xsl:if>
</li>
</xsl:for-each>
<xsl:if test="not($node)">
<xsl:if test="@href">
<a href="{@href}"><xsl:value-of select="$default"/></a>
</xsl:if>
<xsl:if test="not(@href)">
<xsl:value-of select="$default"/>
</xsl:if>
</xsl:if>
</ul>
</li>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View file

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- author="Jeff Parsons (@jeffpar)" website="http://www.pcjs.org/" created="2012-05-05" modified="2014-02-23" license="http://www.gnu.org/licenses/gpl.html" -->
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp "&#160;"> <!ENTITY sect "&#167;"> <!ENTITY copy "&#169;"> <!ENTITY para "&#182;"> <!ENTITY ndash "&#8211;"> <!ENTITY mdash "&#8212;">
<!ENTITY lsquo "&#8216;"> <!ENTITY rsquo "&#8217;"> <!ENTITY ldquo "&#8220;"> <!ENTITY rdquo "&#8221;"> <!ENTITY dagger "&#8224;"> <!ENTITY Dagger "&#8225;">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output doctype-system="about:legacy-compat" method="html"/>
<xsl:include href="/versions/c1pjs/1.34.1/common.xsl"/>
<xsl:include href="/versions/c1pjs/1.34.1/document.xsl"/>
<xsl:include href="/versions/c1pjs/1.34.1/components.xsl"/>
<xsl:template match="/outline">
<xsl:variable name="machineType">
<xsl:choose>
<xsl:when test="machine/@type"><xsl:value-of select="machine/@type"/></xsl:when>
<xsl:otherwise><xsl:value-of select="$MACHINETYPE"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<html lang="en">
<head>
<title><xsl:value-of select="title"/><xsl:text> | </xsl:text><xsl:value-of select="$SITEHOST"/></title>
<xsl:call-template name="commonStyles"/>
<xsl:call-template name="documentStyles"/>
<xsl:call-template name="componentStyles"/>
</head>
<body>
<div class="common">
<div class="page justified">
<xsl:apply-templates/>
</div>
</div>
<xsl:call-template name="componentScripts">
<xsl:with-param name="component">
<xsl:choose>
<xsl:when test="debugger"><xsl:value-of select="$machineType"/>-dbg</xsl:when>
<xsl:otherwise><xsl:value-of select="$machineType"/></xsl:otherwise>
</xsl:choose>
</xsl:with-param>
</xsl:call-template>
</body>
</html>
</xsl:template>
</xsl:stylesheet>