Try to be more consistent when referring to disks vs. drives (eg, Drive Controllers, not Disk Controllers)

This commit is contained in:
Jeff Parsons 2016-05-01 13:47:58 -07:00
commit b04ef7e49f
40 changed files with 5266 additions and 68 deletions

View file

@ -16,8 +16,8 @@ IBM PC Device Configurations
* [ROMs](rom/)
* [Keyboards](keyboard/)
* [Video Adapters](video/)
* Floppy Disk Controllers
* Hard Disk (Fixed Disk) Controllers
* Floppy Drive Controllers
* Hard Drive Controllers
* [Control Panels](panel/)
Each of those devices can be configured in multiple ways, and some support external UI controls.
@ -26,29 +26,30 @@ For example, the IBM PC Keyboard component supports different keyboard models (e
and each of those models can also be configured to have dedicated buttons for selected key combinations,
or even entire keyboard layouts.
Complete machine configurations are constructed from those devices. A machine configuration is a single XML file
that lists all the device components to be used. A machine XML file can choose to configure every device itself,
Complete machine configurations are constructed from those devices. A Machine Configuration is a single XML file
that lists all the device components to be used. A Machine XML file can choose to configure every device itself,
or it can include pre-configured device XML files, such as those provided above or elsewhere.
For example, here's what the machine located at
[/devices/pc/machine/5150/mda/64kb/machine.xml](/devices/pc/machine/5150/mda/64kb/machine.xml) looks like:
<machine id="ibm5150" class="pc" border="1" pos="center" background="#FAEBD7">
<name pos="center">IBM PC (Model 5150) with Monochrome Display</name>
<computer id="pc-mda-64k" name="IBM PC" resume="1"/>
<ram id="ramLow" addr="0x00000"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pc/rom/5150/basic/BASIC100.json"/>
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="/devices/pc/rom/5150/1981-04-24/PCBIOS-REV1.json"/>
<video ref="/devices/pc/video/ibm/mda/ibm-mda.xml"/>
<cpu id="cpu8088" model="8088" autostart="true" padleft="8px">
<control type="button" binding="run">Run</control>
<control type="button" binding="reset">Reset</control>
</cpu>
<keyboard ref="/devices/pc/keyboard/keyboard-minimal.xml"/>
<fdc ref="/disks/pc/samples.xml" pos="right"/>
<chipset id="chipset" model="5150" sw1="01000001" sw2="11110000"/>
<name pos="center">IBM PC (Model 5150) with Monochrome Display</name>
<computer id="pc-mda-64k" name="IBM PC" resume="1"/>
<ram id="ramLow" addr="0x00000"/>
<rom id="romBASIC" addr="0xf6000" size="0x8000" file="/devices/pc/rom/5150/basic/BASIC100.json"/>
<rom id="romBIOS" addr="0xfe000" size="0x2000" file="/devices/pc/rom/5150/1981-04-24/PCBIOS-REV1.json"/>
<video ref="/devices/pc/video/ibm/mda/ibm-mda.xml"/>
<fdc ref="/disks/pc/compiled/samples.xml"/>
<cpu id="cpu8088" model="8088" autostart="true" pos="left" padleft="8px" padbottom="8px">
<control type="button" binding="run">Run</control>
<control type="button" binding="reset">Reset</control>
</cpu>
<keyboard ref="/devices/pc/keyboard/us83-buttons-arrows.xml"/>
<chipset id="chipset" model="5150" sw1="01000001" sw2="11111000"/>
</machine>
All the devices are fully configured within the XML file, except for the [Video](/docs/pcjs/video/),
[Keyboard](/docs/pcjs/keyboard/), and [Floppy Disk Controller (FDC)](/docs/pcjs/fdc/) components, which are defined
in separate XML files.
All the devices are fully configured within the Machine XML file, except for the
[Video](/docs/pcjs/video/) [XML](/devices/pc/video/ibm/mda/ibm-mda.xml),
[Floppy Disk Controller (FDC)](/docs/pcjs/fdc/) [XML](/disks/pc/compiled/samples.xml), and
[Keyboard](/docs/pcjs/keyboard/) [XML](/devices/pc/keyboard/us83-buttons-arrows.xml).

View file

@ -16,7 +16,7 @@ These disk images are used by various [Model 5160](/devices/pc/machine/5160/) ma
To use one of these disks with another machine configuration, include:
<hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",path:"/disks/pc/fixed/10mb/PCDOS200-WIN101-CGA.json",type:3}]'/>
<hdc id="hdcXT" drives='[{name:"10Mb Hard Drive",path:"/disks/pc/fixed/10mb/PCDOS200-WIN101-CGA.json",type:3}]'/>
in the *machine.xml* file. Alternatively, you can include it by reference:

View file

@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",path:"/disks/pc/fixed/10mb/PCDOS200-WIN101-CGA.json",type:3}]'/>
<hdc id="hdcXT" drives='[{name:"10Mb Hard Drive",path:"/disks/pc/fixed/10mb/PCDOS200-WIN101-CGA.json",type:3}]'/>

View file

@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",path:"/disks/pc/fixed/10mb/PCDOS200-WIN101-EGA.json",type:3}]'/>
<hdc id="hdcXT" drives='[{name:"10Mb Hard Drive",path:"/disks/pc/fixed/10mb/PCDOS200-WIN101-EGA.json",type:3}]'/>

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Disk",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]' pos="left" padleft="8px" padbottom="8px">
<hdc id="hdcAT" type="at" drives='[{name:"20Mb Hard Drive",type:2,path:"/disks/pc/fixed/20mb/PCDOS330-EMPTY.json"}]' pos="left" padleft="8px" padbottom="8px">
<control type="button" binding="saveHD0">Save HD</control>
</hdc>

View file

@ -32,8 +32,8 @@ A PCjs machine XML file defines all a machine's components, including:
* [Control Panel](panel/)
* [CPU](cpu/)
* [Debugger](debugger/)
* [Floppy Disk Controller](fdc/)
* [Hard Disk Controller](hdc/)
* [Floppy Drive Controller](fdc/)
* [Hard Drive Controller](hdc/)
* [Keyboard](keyboard/)
* [Mouse](mouse/)
* [RAM](ram/)

View file

@ -13,11 +13,11 @@
<xsl:variable name="CSSCLASS">pcjs</xsl:variable>
<xsl:variable name="APPCLASS">pcjs</xsl:variable>
<xsl:variable name="APPNAME">PCjs</xsl:variable>
<xsl:variable name="APPVERSION">1.21.7</xsl:variable>
<xsl:variable name="APPVERSION">1.22.0</xsl:variable>
<xsl:variable name="SITEHOST">www.pcjs.org</xsl:variable>
<xsl:template name="componentStyles">
<link rel="stylesheet" type="text/css" href="/versions/pcjs/1.21.7/components.css"/>
<link rel="stylesheet" type="text/css" href="/versions/pcjs/1.22.0/components.css"/>
</xsl:template>
<xsl:template name="componentScripts">

View file

@ -774,7 +774,7 @@ g[1],!0);break}Jr(a,g);break;case "m":if("mouse"==g[0]){var yi=g[1],Ag=g[2];if(a
Oa)wc=!1,Oa=null;else{"keys"==Oa&&(Oa="key");"kbd"==Oa&&(Oa="keyboard");for(vc in wq)if(Oa==vc){ud=wq[vc];wc=!!(a.wc&ud);break}if(!ud){a.O("unknown message category: "+Oa);break a}}ud&&("on"==g[2]?(a.wc|=ud,wc=!0):"off"==g[2]&&(a.wc&=~ud,wc=!1))}var os=0,Uc="";for(vc in wq)if(!Oa||Oa==vc){var ps=!!(a.wc&wq[vc]);if(null===wc||wc==ps)Uc&&(Uc+=","),++os%10||(Uc+="\n\t"),"key"==vc&&(vc="keys"),Uc+=vc}void 0===Oa&&a.O("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.O((null!==wc?
wc?"messages on: ":"messages off: ":"message categories:\n\t")+(Uc||"none"));kq(a)}break;case "o":var zi=g[1],qs=g[2];if(zi&&"?"!=zi){var Ai=Eq(a,zi,"port #"),Bi=Eq(a,qs);void 0!==Ai&&void 0!==Bi&&(mc(a.ea,Ai,1,Bi),a.O(u(Ai)+": "+t(Bi)))}else a.O("output commands:"),a.O("\to [p] [b]\twrite byte [b] to port [p]"),a.O("warning: port accesses can affect hardware state");break;case "p":if("print"==g[0]){Kr(a,b.substr(5));break}var Yn="pr"==g[0]?1:0,fe=1+Yn;if(a.N)a.O("step in progress");else{var Bg,
Zn=!1,lb=iq(a,K(a.F),a.F.va.Z);do switch(Bg=!1,a.Qa(lb)){case 38:case 46:case 54:case 62:case 100:case 101:case 102:case 103:case 240:Uq(a,lb,1);Bg=!0;break;case 204:case 206:a.N=fe;Uq(a,lb,1);break;case 205:case 224:case 225:case 226:a.N=fe;Uq(a,lb,lb.Rb?4:2);break;case 232:a.N=fe;Uq(a,lb,lb.Rb?5:3);break;case 154:a.N=fe;Uq(a,lb,lb.Rb?7:5);break;case 255:var $n=a.tb(lb)&14591;if(4351==$n||6399==$n)a.N=fe,rr(a,lb);break;case 243:case 242:Uq(a,lb,1);Zn=Bg=!0;break;case 108:case 109:case 110:case 111:case 164:case 165:case 166:case 167:case 170:case 171:case 172:case 173:case 174:case 175:Zn&&
(a.N=fe,Uq(a,lb,1))}while(Bg);a.N?(a.Sd(a.A,lb,!0),a.Ke()||(a.V&&a.V.yd(),a.N=0)):Mr(a,Yn?"tr":"t")}break;case "r":if("reset"==b){a.V&&a.V.reset();break}jr(a,g);break;case "t":Mr(a,g[0],g[1]);break;case "u":kr(a,g[1],g[2],8);break;case "v":if("var"==g[0]){Hr(a,b.substr(3))||(d=!1);break}a.O("PCjs version 1.21.7 ("+a.F.ia+",RELEASE,NOPREFETCH"+(vb?",TYPEDARRAYS":",LONGARRAYS")+",NOBACKTRACK)");a.O(ya());break;case "x":a:if(g[1]&&"?"!=g[1])switch(g[1]){case "cs":var bf;void 0!==g[3]&&(bf=+g[3]);switch(g[2]){case "int":a.F.Y.jf=
(a.N=fe,Uq(a,lb,1))}while(Bg);a.N?(a.Sd(a.A,lb,!0),a.Ke()||(a.V&&a.V.yd(),a.N=0)):Mr(a,Yn?"tr":"t")}break;case "r":if("reset"==b){a.V&&a.V.reset();break}jr(a,g);break;case "t":Mr(a,g[0],g[1]);break;case "u":kr(a,g[1],g[2],8);break;case "v":if("var"==g[0]){Hr(a,b.substr(3))||(d=!1);break}a.O("PCjs version 1.22.0 ("+a.F.ia+",RELEASE,NOPREFETCH"+(vb?",TYPEDARRAYS":",LONGARRAYS")+",NOBACKTRACK)");a.O(ya());break;case "x":a:if(g[1]&&"?"!=g[1])switch(g[1]){case "cs":var bf;void 0!==g[3]&&(bf=+g[3]);switch(g[2]){case "int":a.F.Y.jf=
bf;break;case "start":a.F.Y.Jf=bf;break;case "stop":a.F.Y.lf=bf;break;default:a.O("unknown cs option");break a}void 0!==bf&&Pc(a.F);a.O("checksums "+(a.F.la.Ye?"enabled":"disabled"));break;case "sp":void 0!==g[2]&&(Xc(a.F,+g[2])||a.O("warning: using 1x multiplier, previous target not reached"));a.O("target speed: "+(a.F.Y.Fe.toFixed(2)+"Mhz")+" ("+a.F.Y.Yd+"x)");break;default:a.O("unknown option: "+g[1])}else a.O("execution options:"),a.O("\tcs int #\tset checksum cycle interval to #"),a.O("\tcs start #\tset checksum cycle start count to #"),
a.O("\tcs stop #\tset checksum cycle stop count to #"),a.O("\tsp #\t\tset speed multiplier to #");break;case "?":if(g[1]){Kr(a,b.substr(1));break}var cf="commands:",Ci;for(Ci in pq)cf+="\n"+ma(Ci,7)+pq[Ci];Tf(a)||(cf+="\nnote: frequency/history disabled if no exec breakpoints");a.O(cf);break;default:a.O("unknown command: "+b),d=!1}}}catch(ao){a.O("debugger error: "+(ao.stack||ao.message)),d=!1}return d}function mq(a,b,c){b=cr(a,b,c);for(var d in b)if(!qr(a,b[d]))return!1;return!0}
Qa(function(){for(var a=nb(document,"pcjs","debugger"),b=0;b<a.length;b++){var c=a[b],d=jb(c),d=new hq(d);mb(d,c)}});function hf(a,b,c){this.id=a.id;this.key=Or(a,b,c);this.ha=a.ha;Pr(this,a.gk)}function Or(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
@ -782,7 +782,7 @@ hf.prototype={constructor:hf,value:function(){return this[this.id]},data:functio
this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}}};function Pr(a,b){a[a.id]={};b&&N(a,"parms",b);a.A=!1}function Qr(a){var b=!0;if(Ca()){var c=JSON.stringify(a[a.id]);Fa(a.key,c)||(w("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function Rr(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){w(c.message||c),b=!1}return b}function Sr(a,b){return a[a.id][b]||null}function N(a,b,c){try{a[a.id][b]=c}catch(d){}}
function Tr(a,b,c){Ua.call(this,"Computer",a,Tr,67108864);this.la.cc=!1;Ur(this,b);this.ga=Nc(this,"autoPower",a);this.N=0;this.ua=a.busWidth||a.buswidth;this.A=Vr;this.aa=null;this.W=this.ra=!1;this.wa=Nc(this,"url")||"";this.ya=(Math.random()+.1).toString(36).substr(2,12);this.B=Wr(this);if(this.F=ib("CPU",this.id)){this.ha=ib("Debugger",this.id);this.L=[];for(b=null;b=Eb(this,"Video",b);)this.L.push(b);this.ea=new Lb({id:this.ve+".bus",busWidth:this.ua},this.F,this.ha);var d,e=gb(this.id);if((this.C=
ib("Panel",this.id))&&this.C.Df)for(b=0;b<e.length;b++)d=e[b],d.Na=this.C.Na,d.O=this.C.O,d.Df=this.C.Df;for(b=0;b<e.length;b++)d=e[b],d.Ic&&d.Ic(this,this.ea,this.F,this.ha);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.X=d:this.A=parseInt(d,10));var f;if(a=Nc(this,"state")||(f=!0,a.state))b=this.ja=a,f||(this.W=!0,this.A=Vr),this.A&&(this.fa=new hf(this,Xr),this.fa.load()?b=null:delete this.fa);!b&&this.A&&(b=Yr(this))&&(this.W=!0);if(b){var g=this;va(b,null,!0,function(a,b,c){c?(g.X=null,g.W=
!1,g.Na("Unable to load machine state from server (error "+c+(b?": "+na(b):"")+")")):(g.aa=b,g.ra=!0);rb(g)})}else rb(this);this.qa.power||(this.ga=!0);!c&&this.ga&&Zr(this,this.$f)}else w("Unable to find CPU component")}db(Tr);var Xr="1.21.7",Vr=0;m=Tr.prototype;m.ff=function(){return this.ya};function Ur(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){w(d.message+" ("+c+")")}}a.U=b}
!1,g.Na("Unable to load machine state from server (error "+c+(b?": "+na(b):"")+")")):(g.aa=b,g.ra=!0);rb(g)})}else rb(this);this.qa.power||(this.ga=!0);!c&&this.ga&&Zr(this,this.$f)}else w("Unable to find CPU component")}db(Tr);var Xr="1.22.0",Vr=0;m=Tr.prototype;m.ff=function(){return this.ya};function Ur(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){w(d.message+" ("+c+")")}}a.U=b}
function Nc(a,b,c){var d=b.toLowerCase(),d=Ya[b]||Ya[d];void 0===d&&a.U&&(d=a.U[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}m.ke=function(){return this.B||""};function Zr(a,b,c){for(var d=gb(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!sb(f)){sb(f,function(){Zr(a,b,c)});return}}b.call(a,c)}
function $r(a,b){var c=new hf(a,Xr,"validate");if(c.load()&&Rr(c)){var d=Sr(c,"timestamp"),e=b?Sr(b,"timestamp"):"unknown";d!=e&&(a.Na("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
m.$f=function(a){void 0===a&&(a=this.A||(this.aa?1:Vr));if(!this.N){this.N++;var b=!1,c=!1;this.pa=!1;var d=this.fa||new hf(this,Xr);if(-1==a)b=!0;else if(a>Vr){if(d.load(this.aa)){this.V=new hf(this,Xr,"failsafe");this.V.load()&&(as(this,d),a=2,Pr(this.V));N(this.V,"timestamp",qa());Qr(this.V);var e=this.A&&!this.W;if(1==a||za("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=Rr(d)){var f=Sr(d,"code"),g=Sr(d,"data");f&&("ok"==f?d.load(g):("error"==f&&"no machine state"!=
@ -790,7 +790,7 @@ g?(this.Na("Error: "+g),"unable to verify user"==g&&(Fa("user",""),this.B=null))
function bs(a,b,c,d,e){if(!b.la.cc){b.la.cc=!0;if(b.ic){var f=null;e&&((f=Sr(c,b.id))||(f=Sr(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.ic(f,d)&&f&&(w("Unable to restore state for "+b.type),a.ja&&!a.ra?(c.clear(),a.A=Vr,window&&window.location.reload()):a.pa=!0,b.ic(null),e=!1)}if(!d&&b.tk)for(a=b.tk.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.Ii=function(a){var b=a[0],c=0>a[1];a=a[2];this.la.cc=!0;var d=this.qa.power;d&&(d.textContent="Shutdown");this.ka||(this.O("PCjs v"+Xr+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.ka=!0);this.F&&(bs(this,this.F,b,c,a),Sc(this.F));this.pa&&(as(this,b),b.clear());!c&&this.V&&(this.V.clear(),delete this.V);this.N=0};
function as(a,b){if(za("There may be a problem with your PCjs machine.\n\nTo help us diagnose it, click OK to send this PCjs machine state to http://www.pcjs.org.")){var c=a.wa,d=a.ke(),e=b.toString(),f={app:"PCjs"};f.ver=Xr;f.url=c;f.user=d;f.type="bug";f.data=e;va("http://www.pcjs.org/api/v1/report",f,!0)}}
function Nr(a,b,c){var d,e="none";if(a.N)return null;a.N--;var f=new hf(a,Xr),g=new hf(a,Xr,"validate"),h=qa();N(g,"timestamp",h);N(f,"timestamp",h);N(f,"version","1.21.7");N(f,"url",window?window.location.href:null);N(f,"browser",ya());a.F&&a.F.hc&&(c&&a.F.Wb(),d=a.F.hc(b,c),"object"===typeof d&&N(f,a.F.id,d),c&&(a.F.la.cc=!1,!1===d&&(e=null)));for(var h=gb(a.id),k=0;k<h.length;k++){var l=h[k];l.la.cc&&(l.hc&&(d=l.hc(b,c),"object"===typeof d&&N(f,l.id,d)),c&&(l.la.cc=!1,!1===d&&(e=null)))}e&&(c?
function Nr(a,b,c){var d,e="none";if(a.N)return null;a.N--;var f=new hf(a,Xr),g=new hf(a,Xr,"validate"),h=qa();N(g,"timestamp",h);N(f,"timestamp",h);N(f,"version","1.22.0");N(f,"url",window?window.location.href:null);N(f,"browser",ya());a.F&&a.F.hc&&(c&&a.F.Wb(),d=a.F.hc(b,c),"object"===typeof d&&N(f,a.F.id,d),c&&(a.F.la.cc=!1,!1===d&&(e=null)));for(var h=gb(a.id),k=0;k<h.length;k++){var l=h[k];l.la.cc&&(l.hc&&(d=l.hc(b,c),"object"===typeof d&&N(f,l.id,d)),c&&(l.la.cc=!1,!1===d&&(e=null)))}e&&(c?
(h=d=!1,b?(a.B&&cs(a,a.B,f.toString()),Qr(g)&&Qr(f)||(e=null,d=h=!0)):a.A&&(d=!0,h=3==a.A),d&&f.clear(h)):e=f.toString());c&&(a.la.cc=!1,b=a.qa.power)&&(b.textContent="Power");a.N=0;return e}m.reset=function(){this.ea&&this.ea.reset&&(y(this,"Resetting "+this.ea.type),this.ea.reset());for(var a=gb(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.ea&&c.reset&&(y(this,"Resetting "+c.type),c.reset())}};
m.start=function(a,b){for(var c=gb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};m.stop=function(a,b){for(var c=gb(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
m.Pb=function(a,b,c){var d=this;switch(b){case "power":return this.qa[b]=c,c.onclick=function(){d.N||(d.la.cc?Nr(d,!1,!0):Zr(d,d.$f))},!0;case "reset":return this.qa[b]=c,c.onclick=function(){if(d.la.cc&&!d.N)if(d.A&&!d.X){var a=za("Click OK to save changes to this PCjs machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");Nr(d,a,!0);!a&&d.ja?window&&window.location.reload():(a||(d.dh=!0),d.$f(Vr),d.dh=!1)}else d.reset(),d.F&&Sc(d.F)},!0;case "save":if(ha(xa(),"pcjs.org")){c.parentNode.removeChild(c);
@ -809,9 +809,9 @@ h=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,""))
function ss(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");va(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],l,n=/( [a-z]+=)(['"])(.*?)\2/g;l=n.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],g);ss(a,b,c)}})}else c(a,null)}
function ts(a,b,c,d){function e(a){if(void 0===h){var b=g&&nb(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=la(a))}function f(a){e("Error: "+a);k&&(--es||Sa(!0));k=!1}var g,h,k=!0;es++;eb[a]={};try{if(g=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],q=document.createElement("style");q.type="text/css";q.styleSheet?q.styleSheet.cssText=l:q.appendChild(document.createTextNode(l));n.appendChild(q)}c||
(c="/versions/pcjs/1.21.7/components.xsl");l=function(d,h){h?fs(c,null,null,!1,e,function(d,k){if(k)if(fb(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=h.transformNode(k);l?(g.outerHTML=l,--es||Sa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(k),(l=l.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--es||Sa(!0)):f("invalid machine element: "+
(c="/versions/pcjs/1.22.0/components.xsl");l=function(d,h){h?fs(c,null,null,!1,e,function(d,k){if(k)if(fb(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var l=h.transformNode(k);l?(g.outerHTML=l,--es||Sa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(l=new XSLTProcessor,l.importStylesheet(k),(l=l.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--es||Sa(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?fs(b,a,d,!0,e,l):rs(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(p){f(p.message)}return k}window.embedPC=function(a,b,c,d){Sa(!1);return ts(a,b,c,d)};window.enableEvents=Sa;window.sendEvent=Ta;
function us(a,b,c,d){if(!c&&b){d.push(b);a=eb[d[0]];b=null;for(var e in a)if(ha(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?va(b,null,!0,function(a,b){vs(b,d)}):vs(null,d)}else w("Error ("+c+") requesting "+a)}
function vs(a,b){var c,d,e,f=b[0],g=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var h=eb[f],k={},l;for(l in h){var n=h[l],q=ga(l);if("xml"==q){for(q=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=q.exec(h[l]);){var p=d[2];p&&(h[p]||(n=n.replace(d[0],"")))}d=l=fa(l)}else"xsl"==q&&(e=l=fa(l));k[l]=n}a&&(k[l="css"]=a);b[2]&&(k[l="parms"]=b[2]);b[3]&&(k[l="state"]=b[3]);d&&e?(l=JSON.stringify(k),g+=".js",c=c[1]+"var resources="+l+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"&#xA9;"),c=Ia(c,"javascript",!1,g),c=c+(', copy it to your web server as "'+g+'", and then add the following to your web page:\n\n')+('<div id="'+f+'"></div>\n'),c+="...\n",c+='<script type="text/javascript" src="'+g+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",w(c)):w("Missing XML/XSL resources")}
window.savePC=function(a,b,c){var d=ib("Computer",a),e=ib("Debugger",a);if(d){var f=Nr(d,!0),g=d.U?JSON.stringify(d.U):null;b||(b="/versions/pcjs/1.21.7/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,gk:g}))return!0;va(b,null,!0,function(c,d,e){us(c,d,e,[a,fa(b,!0),g,f])});return!0}w("Unable to identify machine '"+a+"'");return!1};})();
window.savePC=function(a,b,c){var d=ib("Computer",a),e=ib("Debugger",a);if(d){var f=Nr(d,!0),g=d.U?JSON.stringify(d.U):null;b||(b="/versions/pcjs/1.22.0/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,gk:g}))return!0;va(b,null,!0,function(c,d,e){us(c,d,e,[a,fa(b,!0),g,f])});return!0}w("Unable to identify machine '"+a+"'");return!1};})();

View file

@ -600,7 +600,7 @@ be.prototype={constructor:be,value:function(){return this[this.id]},data:functio
this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}}};function ln(a,b){a[a.id]={};b&&C(a,"parms",b);a.A=!1}function mn(a){var b=!0;if(ta()){var c=JSON.stringify(a[a.id]);xa(a.key,c)||(n("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function nn(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){n(c.message||c),b=!1}return b}function on(a,b){return a[a.id][b]||null}function C(a,b,c){try{a[a.id][b]=c}catch(d){}}
function pn(a,b,c){Ia.call(this,"Computer",a,pn);this.ea.Rb=!1;qn(this,b);this.ba=jc(this,"autoPower",a);this.G=0;this.ia=a.busWidth||a.buswidth;this.B=rn;this.S=null;this.K=this.da=!1;this.la=jc(this,"url")||"";this.ma=(Math.random()+.1).toString(36).substr(2,12);this.C=sn(this);if(this.A=Va("CPU",this.id)){this.Ia=Va("Debugger",this.id);this.I=[];for(b=null;b=kb(this,"Video",b);)this.I.push(b);this.ha=new rb({id:this.lf+".bus",busWidth:this.ia},this.A,this.Ia);var d,e=Ta(this.id);if((this.D=Va("Panel",
this.id))&&this.D.gg)for(b=0;b<e.length;b++)d=e[b],d.Ba=this.D.Ba,d.rc=this.D.rc,d.gg=this.D.gg;for(b=0;b<e.length;b++)d=e[b],d.pc&&d.pc(this,this.ha,this.A,this.Ia);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.P=d:this.B=parseInt(d,10));var f;if(a=jc(this,"state")||(f=!0,a.state))b=this.W=a,f||(this.K=!0,this.B=rn),this.B&&(this.R=new be(this,tn),this.R.load()?b=null:delete this.R);!b&&this.B&&(b=un(this))&&(this.K=!0);if(b){var g=this;pa(b,null,!0,function(a,b,c){c?(g.P=null,g.K=!1,g.Ba("Unable to load machine state from server (error "+
c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(g.S=b,g.da=!0);ab(g)})}else ab(this);this.ka.power||(this.ba=!0);!c&&this.ba&&vn(this,this.df)}else n("Unable to find CPU component")}Qa(pn);var tn="1.21.7",rn=0;l=pn.prototype;l.se=function(){return this.ma};function qn(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){n(d.message+" ("+c+")")}}a.L=b}
c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(g.S=b,g.da=!0);ab(g)})}else ab(this);this.ka.power||(this.ba=!0);!c&&this.ba&&vn(this,this.df)}else n("Unable to find CPU component")}Qa(pn);var tn="1.22.0",rn=0;l=pn.prototype;l.se=function(){return this.ma};function qn(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){n(d.message+" ("+c+")")}}a.L=b}
function jc(a,b,c){var d=b.toLowerCase(),d=La[b]||La[d];void 0===d&&a.L&&(d=a.L[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}l.Ad=function(){return this.C||""};function vn(a,b,c){for(var d=Ta(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!bb(f)){bb(f,function(){vn(a,b,c)});return}}b.call(a,c)}
function wn(a,b){var c=new be(a,tn,"validate");if(c.load()&&nn(c)){var d=on(c,"timestamp"),e=b?on(b,"timestamp"):"unknown";d!=e&&(a.Ba("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}
l.df=function(a){void 0===a&&(a=this.B||(this.S?1:rn));if(!this.G){this.G++;var b=!1,c=!1;this.Z=!1;var d=this.R||new be(this,tn);if(-1==a)b=!0;else if(a>rn){if(d.load(this.S)){this.H=new be(this,tn,"failsafe");this.H.load()&&(xn(this,d),a=2,ln(this.H));C(this.H,"timestamp",la());mn(this.H);var e=this.B&&!this.K;if(1==a||ra("Click OK to restore the previous PCjs machine state, or CANCEL to reset the machine.")){if(c=nn(d)){var f=on(d,"code"),g=on(d,"data");f&&("ok"==f?d.load(g):("error"==f&&"no machine state"!=
@ -608,7 +608,7 @@ g?(this.Ba("Error: "+g),"unable to verify user"==g&&(xa("user",""),this.C=null))
function yn(a,b,c,d,e){if(!b.ea.Rb){b.ea.Rb=!0;if(b.Vb){var f=null;e&&((f=on(c,b.id))||(f=on(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.Vb(f,d)&&f&&(n("Unable to restore state for "+b.type),a.W&&!a.da?(c.clear(),a.B=rn,window&&window.location.reload()):a.Z=!0,b.Vb(null),e=!1)}if(!d&&b.zh)for(a=b.zh.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
l.Nh=function(a){var b=a[0],c=0>a[1];a=a[2];this.ea.Rb=!0;var d=this.ka.power;d&&(d.textContent="Shutdown");this.Y||(this.rc("PCjs v"+tn+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.Y=!0);this.A&&(yn(this,this.A,b,c,a),nc(this.A));this.Z&&(xn(this,b),b.clear());!c&&this.H&&(this.H.clear(),delete this.H);this.G=0};
function xn(a,b){if(ra("There may be a problem with your PCjs machine.\n\nTo help us diagnose it, click OK to send this PCjs machine state to http://www.pcjs.org.")){var c=a.la,d=a.Ad(),e=b.toString(),f={app:"PCjs"};f.ver=tn;f.url=c;f.user=d;f.type="bug";f.data=e;pa("http://www.pcjs.org/api/v1/report",f,!0)}}
function zn(a,b,c){var d,e="none";if(a.G)return null;a.G--;var f=new be(a,tn),g=new be(a,tn,"validate"),h=la();C(g,"timestamp",h);C(f,"timestamp",h);C(f,"version","1.21.7");C(f,"url",window?window.location.href:null);C(f,"browser",window?window.navigator.userAgent:"");a.A&&a.A.Ub&&(c&&oc(a.A),d=a.A.Ub(b,c),"object"===typeof d&&C(f,a.A.id,d),c&&(a.A.ea.Rb=!1,!1===d&&(e=null)));for(var h=Ta(a.id),k=0;k<h.length;k++){var m=h[k];m.ea.Rb&&(m.Ub&&(d=m.Ub(b,c),"object"===typeof d&&C(f,m.id,d)),c&&(m.ea.Rb=
function zn(a,b,c){var d,e="none";if(a.G)return null;a.G--;var f=new be(a,tn),g=new be(a,tn,"validate"),h=la();C(g,"timestamp",h);C(f,"timestamp",h);C(f,"version","1.22.0");C(f,"url",window?window.location.href:null);C(f,"browser",window?window.navigator.userAgent:"");a.A&&a.A.Ub&&(c&&oc(a.A),d=a.A.Ub(b,c),"object"===typeof d&&C(f,a.A.id,d),c&&(a.A.ea.Rb=!1,!1===d&&(e=null)));for(var h=Ta(a.id),k=0;k<h.length;k++){var m=h[k];m.ea.Rb&&(m.Ub&&(d=m.Ub(b,c),"object"===typeof d&&C(f,m.id,d)),c&&(m.ea.Rb=
!1,!1===d&&(e=null)))}e&&(c?(h=d=!1,b?(a.C&&An(a,a.C,f.toString()),mn(g)&&mn(f)||(e=null,d=h=!0)):a.B&&(d=!0,h=3==a.B),d&&f.clear(h)):e=f.toString());c&&(a.ea.Rb=!1,b=a.ka.power)&&(b.textContent="Power");a.G=0;return e}l.reset=function(){this.ha&&this.ha.reset&&this.ha.reset();for(var a=Ta(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.ha&&c.reset&&c.reset()}};l.start=function(a,b){for(var c=Ta(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};
l.stop=function(a,b){for(var c=Ta(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
l.zb=function(a,b,c){var d=this;switch(b){case "power":return this.ka[b]=c,c.onclick=function(){d.G||(d.ea.Rb?zn(d,!1,!0):vn(d,d.df))},!0;case "reset":return this.ka[b]=c,c.onclick=function(){if(d.ea.Rb&&!d.G)if(d.B&&!d.P){var a=ra("Click OK to save changes to this PCjs machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");zn(d,a,!0);!a&&d.W?window&&window.location.reload():(a||(d.jg=!0),d.df(rn),d.jg=!1)}else d.reset(),d.A&&nc(d.A)},!0;case "save":if(ha(qa(),"pcjs.org")){c.parentNode.removeChild(c);
@ -627,9 +627,9 @@ h=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,""))
function Fn(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");pa(e,null,!0,function(f,g,h){if(h||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(f=d[3])if(h=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=h[0],m,p=/( [a-z]+=)(['"])(.*?)\2/g;m=p.exec(f);)k=0>k.indexOf(m[1])?k.replace(">",m[0]+">"):k.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);h[0]!=k&&(g=g.replace(h[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],g);Fn(a,b,c)}})}else c(a,null)}
function Gn(a,b,c,d){function e(a){if(void 0===h){var b=g&&Za(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ja(a))}function f(a){e("Error: "+a);k&&(--Cn||Ga(!0));k=!1}var g,h,k=!0;Cn++;Ra[a]={};try{if(g=document.getElementById(a)){var m;if("object"==typeof resources&&(m=resources.css)){var p=document.head||document.getElementsByTagName("head")[0],x=document.createElement("style");x.type="text/css";x.styleSheet?x.styleSheet.cssText=m:x.appendChild(document.createTextNode(m));p.appendChild(x)}c||
(c="/versions/pcjs/1.21.7/components.xsl");m=function(d,h){h?Dn(c,null,null,!1,e,function(d,k){if(k)if(Sa(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var m=h.transformNode(k);m?(g.outerHTML=m,--Cn||Ga(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(m=new XSLTProcessor,m.importStylesheet(k),(m=m.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(m,g),--Cn||Ga(!0)):f("invalid machine element: "+
(c="/versions/pcjs/1.22.0/components.xsl");m=function(d,h){h?Dn(c,null,null,!1,e,function(d,k){if(k)if(Sa(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var m=h.transformNode(k);m?(g.outerHTML=m,--Cn||Ga(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(m=new XSLTProcessor,m.importStylesheet(k),(m=m.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(m,g),--Cn||Ga(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?Dn(b,a,d,!0,e,m):En(b,null,a,d,!1,e,m)}else f("missing machine element: "+a)}catch(r){f(r.message)}return k}window.embedPC=function(a,b,c,d){Ga(!1);return Gn(a,b,c,d)};window.enableEvents=Ga;window.sendEvent=Ha;
function Hn(a,b,c,d){if(!c&&b){d.push(b);a=Ra[d[0]];b=null;for(var e in a)if(ha(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?pa(b,null,!0,function(a,b){In(b,d)}):In(null,d)}else n("Error ("+c+") requesting "+a)}
function In(a,b){var c,d,e,f=b[0],g=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var h=Ra[f],k={},m;for(m in h){var p=h[m],x=ga(m);if("xml"==x){for(x=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=x.exec(h[m]);){var r=d[2];r&&(h[r]||(p=p.replace(d[0],"")))}d=m=fa(m)}else"xsl"==x&&(e=m=fa(m));k[m]=p}a&&(k[m="css"]=a);b[2]&&(k[m="parms"]=b[2]);b[3]&&(k[m="state"]=b[3]);d&&e?(m=JSON.stringify(k),g+=".js",c=c[1]+"var resources="+m+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"&#xA9;"),c=za(c,"javascript",!1,g),c=c+(', copy it to your web server as "'+g+'", and then add the following to your web page:\n\n')+('<div id="'+f+'"></div>\n'),c+="...\n",c+='<script type="text/javascript" src="'+g+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",n(c)):n("Missing XML/XSL resources")}
window.savePC=function(a,b,c){var d=Va("Computer",a),e=Va("Debugger",a);if(d){var f=zn(d,!0),g=d.L?JSON.stringify(d.L):null;b||(b="/versions/pcjs/1.21.7/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,fj:g}))return!0;pa(b,null,!0,function(c,d,e){Hn(c,d,e,[a,fa(b,!0),g,f])});return!0}n("Unable to identify machine '"+a+"'");return!1};})();
window.savePC=function(a,b,c){var d=Va("Computer",a),e=Va("Debugger",a);if(d){var f=zn(d,!0),g=d.L?JSON.stringify(d.L):null;b||(b="/versions/pcjs/1.22.0/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,fj:g}))return!0;pa(b,null,!0,function(c,d,e){Hn(c,d,e,[a,fa(b,!0),g,f])});return!0}n("Unable to identify machine '"+a+"'");return!1};})();

View file

@ -4,7 +4,7 @@ title: PCjs &lt;fdc&gt; Element
permalink: /docs/pcjs/fdc/
---
PCjs Floppy Disk Controller (FDC) Component
PCjs Floppy Drive Controller (FDC) Component
---
Format
@ -13,7 +13,7 @@ Format
Purpose
---
Creates an instance of the Floppy Disk Controller (FDC) component. The FDC is responsible for:
Creates an instance of the Floppy Drive Controller (FDC) component. The FDC is responsible for:
- Automatically loading diskette image files at boot;
- Simulating the appropriate controller hardware ports;

View file

@ -4,7 +4,7 @@ title: PCjs &lt;hdc&gt; Element
permalink: /docs/pcjs/hdc/
---
PCjs Hard Disk Controller (HDC) Component
PCjs Hard Drive Controller (HDC) Component
---
Format
@ -13,7 +13,7 @@ Format
Purpose
---
Creates an instance of the Hard Disk Controller (HDC) component. The HDC is responsible for:
Creates an instance of the Hard Drive Controller (HDC) component. The HDC is responsible for:
- Automatically loading fixed disk image files at boot;
- Simulating the appropriate controller hardware ports;
@ -30,7 +30,7 @@ Attributes
This is an array definition, with one array entry per fixed disk. Each entry is a drive object definition,
each of which may contain 'name', 'path' and 'type' properties. For example:
[{name:'10Mb Hard Disk',path:'10mb.json',type:3}]
[{name:'10Mb Hard Drive',path:'10mb.json',type:3}]
The 'path' property is optional; if omitted, an empty disk matching the specified drive type will be created
(10mb in the case of drive type 3).
@ -62,7 +62,7 @@ This component has no bindings. Fixed disks cannot be loaded or unloaded once th
Example
---
<hdc id="hdcXT" drives="[{name:'10Mb Hard Disk',type:3}]"/>
<hdc id="hdcXT" drives="[{name:'10Mb Hard Drive',type:3}]"/>
Output
---

View file

@ -504,7 +504,7 @@ DiskDump.aDefaultBPBs = [
0x02, 0x00, // 0x1A: number of heads (2)
0x00, 0x00, 0x00, 0x00 // 0x1C: number of hidden sectors (always 0 for non-partitioned media)
],
[ // define BPB for 10Mb hard disk
[ // define BPB for 10Mb hard drive
0xEB, 0xFE, 0x90, // 0x00: JMP instruction, following by 8-byte OEM signature
0x50, 0x43, 0x4A, 0x53, 0x2E, 0x4F, 0x52, 0x47, // MY_OEM_STRING
// 0x49, 0x42, 0x4D, 0x20, 0x20, 0x32, 0x2E, 0x30, // "IBM 2.0" (this is a real OEM signature)
@ -514,7 +514,7 @@ DiskDump.aDefaultBPBs = [
0x02, // 0x10: FAT copies (2)
0x00, 0x02, // 0x11: root directory entries (0x200 or 512) 0x200 * 0x20 = 0x4000 (1 sector is 0x200 bytes, total of 0x20 or 32 sectors)
0x03, 0x51, // 0x13: number of sectors (0x5103 or 20739; * 512 bytes/sector = 10,618,368 bytes = 10,369Kb = 10Mb)
0xF8, // 0x15: media type (eg, 0xF8: hard disk w/FAT12)
0xF8, // 0x15: media type (eg, 0xF8: hard drive w/FAT12)
0x08, 0x00, // 0x16: sectors per FAT (8)
// Wikipedia (http://en.wikipedia.org/wiki/File_Allocation_Table#BIOS_Parameter_Block) implies everything past this point was introduced
// post-DOS 2.0. I think that's wrong, because I just formatted a diskette with PC-DOS 2.0 and it properly initialized the next 3 fields as well.
@ -557,7 +557,7 @@ DiskDump.asTextFileExts = [".MD", ".ME", ".ASM", ".BAS", ".TXT", ".XML"];
*
* Additional command-line arguments include:
*
* --mbhd={number}: requests a hard disk image with the given number of megabytes (DEPRECATED)
* --mbhd={number}: requests a hard drive image with the given number of megabytes (DEPRECATED)
* --size={number}: requests a target disk size with the given number of kilobytes (eg, 360, 720, 1200, 1440, 10000)
* --exclude={filename}: specifies a filename that should be excluded from the image; repeat as often as needed
* --overwrite: allows the --output option to overwrite an existing file; default is to NOT overwrite
@ -2306,7 +2306,7 @@ DiskDump.prototype.buildImageFromFiles = function(aFiles, done)
*/
for (var iBPB = 1; iBPB < DiskDump.aDefaultBPBs.length; iBPB++) {
/*
* If this BPB is for a hard disk but a hard disk size was not specified, skip it.
* If this BPB is for a hard drive but a disk size was not specified, skip it.
*/
abBoot = DiskDump.aDefaultBPBs[iBPB];
if ((abBoot[0x15] == 0xF8) != (this.kbTarget >= 10000)) continue;
@ -2356,7 +2356,7 @@ DiskDump.prototype.buildImageFromFiles = function(aFiles, done)
this.bufDisk.fill(0);
/*
* Output a Master Boot Record (MBR), if a hard disk image was requested
* Output a Master Boot Record (MBR), if a hard drive image was requested
*/
if (this.kbTarget >= 10000) {
abSector = this.buildMBR(cHeads, cSectorsPerTrack, cbSector, cTotalSectors);
@ -2464,7 +2464,7 @@ DiskDump.prototype.convertToJSON = function()
var offBootSector = 0;
var cbDiskData = this.bufDisk.length;
if (cbDiskData >= 3000000) { // arbitrary threshold between diskette image sizes and hard disk image sizes
if (cbDiskData >= 3000000) { // arbitrary threshold between diskette image sizes and hard drive image sizes
var wSig = this.bufDisk.readUInt16LE(0x1FE);
if (wSig == 0xAA55) {
/*
@ -3084,7 +3084,7 @@ DiskDump.prototype.convertToIMG = function()
* fJSONComments as another way of disabling "branding" via the API; requesting an IMG file with comments
* is otherwise a nonsensical request.
*/
if (!fDebug && !this.fJSONComments && buf.length < 3000000) { // arbitrary size threshold between diskette images and hard disk images
if (!fDebug && !this.fJSONComments && buf.length < 3000000) { // arbitrary size threshold between diskette images and hard drive images
/*
* Mimic the BPB test in convertToJSON(), because we don't want to blast an OEM string into non-DOS diskette images
*/

View file

@ -344,7 +344,7 @@ MarkOut.aHTMLEntities = {
* 'template' (eg, "machine.xsl")
* 'uncompiled' (eg, true)
* 'autoMount' (eg, {"A":{"name":"OS/2 FOOTBALL Boot Disk (v7.68.17)","path":"/disks/pc/os2/misc/football/debugger/FOOTBALL-7.68.17.json"}})
* 'drives' (eg, [{name:"68Mb Hard Disk",type:4,path:"http://archive.pcjs.org/disks/pc/fixed/68mb/win95.json"}])
* 'drives' (eg, [{name:"68Mb Hard Drive",type:4,path:"http://archive.pcjs.org/disks/pc/fixed/68mb/win95.json"}])
* 'parms'
*
* Non-reserved properties include:

View file

@ -92,11 +92,11 @@
*
* An example of #1 is in /devices/pc/machine/5160/cga/256kb/demo/machine.xml:
*
* <hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",type:3}]'/>
* <hdc id="hdcXT" drives='[{name:"10Mb Hard Drive",type:3}]'/>
*
* and an example of #2 is in /disks/pc/fixed/win101.xml:
*
* <hdc id="hdcXT" drives='[{name:"10Mb Hard Disk",path:"/disks/pc/fixed/win101/10mb.json",type:3}]'/>
* <hdc id="hdcXT" drives='[{name:"10Mb Hard Drive",path:"/disks/pc/fixed/win101/10mb.json",type:3}]'/>
*
* The HDC component expects an array of drive entries. Array position determines drive numbering
* (the first entry is drive 0, the second is drive 1, etc), and each entry contains the following
@ -150,7 +150,7 @@
* The real challenge here is avoiding revocation of a machine that still has critical changes to commit,
* but since we can't even solve the problem of a user closing their browser at an inopportune time
* and potentially leaving a disk image in an inconsistent state, premature revocation is the least of
* our problems. Since a real hard disk could suffer the same fate if the machine's power was turned off
* our problems. Since a real hard drive could suffer the same fate if the machine's power was turned off
* at the wrong time, you could say that we're simply providing a faithful simulation of reality.
*/
@ -1062,7 +1062,7 @@ Disk.prototype.load = function(sDiskName, sDiskPath, file, fnNotify, controller)
var sDiskParm = DumpAPI.QUERY.PATH;
var sSizeParm = '&' + DumpAPI.QUERY.MBHD + "=10";
/*
* 'mbhd' is a new parm added for hard disk support. In the case of 'file' or 'dir' requests,
* 'mbhd' is a new parm added for hard drive support. In the case of 'file' or 'dir' requests,
* 'mbhd' informs DumpAPI.ENDPOINT that it should create a hard disk image, and one not larger than
* the specified size (eg, 10mb). In fact, until DumpAPI.ENDPOINT is changed to create custom hard
* disk BPBs, you'll always get a standard PC XT 10mb disk image, so if the 'file' or 'dir' contains

View file

@ -343,7 +343,7 @@ FDC.REG_DATA = {
/*
* FDC "Fixed Disk" Register (0x3F6, write-only)
*
* Since this register's functions are all specific to the Hard Disk Controller, see the HDC component for details.
* Since this register's functions are all specific to the Hard Drive Controller, see the HDC component for details.
* The fact that this HDC register is in the middle of the FDC I/O port range is an oddity of the "HFCOMBO" controller.
*/
@ -351,8 +351,8 @@ FDC.REG_DATA = {
* FDC Digital Input Register (0x3F7, read-only, MODEL_5170 only)
*
* Bit 7 indicates a diskette change (the MODEL_5170 introduced change-line support). Bits 0-6 are for the selected
* hard disk drive, so this port must be shared with the HDC; bits 0-6 are valid for 50 microseconds after a write to
* the Drive Head Register.
* hard drive, so this port must be shared with the HDC; bits 0-6 are valid for 50 microseconds after a write to the
* Drive Head Register.
*/
FDC.REG_INPUT = {
PORT: 0x3F7,

View file

@ -132,7 +132,7 @@ HDC.DEFAULT_DRIVE_NAME = "Hard Drive";
* perfectly justified in retaining my original understanding of Kb and Mb and completely ignoring the
* existence of KiB and MiB.
*
* Besides, I suspect these changes were nothing more than a self-serving push by hard disk manufacturers,
* Besides, I suspect these changes were nothing more than a self-serving push by hard drive manufacturers,
* who wanted to exaggerate their disk capacities by treating Mb as 1,000,000 bytes.
*
* Also, I capitalize only the first letter of units like Kb and Mb, because kilobyte and megabyte are
@ -578,7 +578,7 @@ HDC.prototype.setBinding = function(sHTMLType, sBinding, control, sValue)
var sAlert = web.downloadFile(disk.encodeAsBase64(), "octet-stream", true, disk.sDiskFile.replace(".json", ".img"));
web.alertUser(sAlert);
} else {
hdc.notice("Hard disk " + iDrive + " is not available.");
hdc.notice("Hard drive " + iDrive + " is not available.");
}
};
}(+sBinding.slice(-1));
@ -1195,7 +1195,7 @@ HDC.prototype.seekDrive = function(drive, iSector, nSectors)
/*
* Important difference between the FDC and the XTC: the XTC uses 0-based sector numbers, so unlike
* FDC.seekDrive(), we must NOT add 1 to bSector below. I could change how sector numbers are stored in
* hard disk images, but it seems preferable to keep the image format consistent and controller-independent.
* hard drive images, but it seems preferable to keep the image format consistent and controller-independent.
*/
drive.bSector = (iSector % nSectorsPerTrack);
drive.nBytes = nSectors * aDiskInfo[3];
@ -1324,8 +1324,8 @@ HDC.prototype.doneLoadDisk = function(drive, disk, sDiskName, sDiskPath)
/**
* unloadDrive(iDrive)
*
* NOTE: At the moment, we support only auto-mounts; there is no user interface for selecting hard disk images,
* let alone unloading them, so there is currently no need for the following function.
* NOTE: At the moment, we support only auto-mounts; there is no user interface for selecting hard drive
* images, let alone unloading them, so there is currently no need for the following function.
*
* @this {HDC}
* @param {number} iDrive
@ -2158,7 +2158,7 @@ HDC.prototype.setATCIRR = function(fWrite)
if (!(this.regFDR & HDC.ATC.FDR.INT_DISABLE)) {
/*
* TODO: Determine what the "correct" instruction delay should be here. When the OS/2 1.0 Install Disk
* begins copying files to the hard disk, at one point it performs the following 125-sector write (use the
* begins copying files to the hard drive, at one point it performs the following 125-sector write (use the
* Debugger's "m hdc on" and "m pic on" commands to enable HDC and PIC messages, along with "m data on"
* if you also want to see the actual sector data being written):
*
@ -2953,7 +2953,7 @@ HDC.prototype.intBIOSDisk = function(addr)
* controller the caller really wants to reset.
*
* An unfortunate side-effect of this behavior: when the HDC BIOS is initialized for the first time, it may
* issue several resets internally, depending on whether there are 0, 1 or 2 hard disks installed, and each
* issue several resets internally, depending on whether there are 0, 1 or 2 hard drives installed, and each
* of those resets also triggers completely useless diskette resets, each wasting up to two seconds waiting
* for the FDC to interrupt. The FDC tries to interrupt, but it can't, because at this early stage of
* ROM BIOS initialization, IRQ.FDC hasn't been unmasked yet.

View file

@ -85,9 +85,9 @@ DiskAPI.DISKETTE_FORMATS = {
1474560: [80,2,18], // media type 0xF0: 80 cylinders, 2 heads (double-sided), 18 sectors/track, (2880 total sectors x 512 bytes/sector == 1474560)
2949120: [80,2,36], // media type 0xF0: 80 cylinders, 2 heads (double-sided), 36 sectors/track, (5760 total sectors x 512 bytes/sector == 2949120)
/*
* The following are common early hard disk sizes, which we explicitly map to CHS values, since the BPB can mislead us when attempting to calculate total cylinders
* The following are common early hard drive sizes, which we explicitly map to CHS values, since the BPB can mislead us when attempting to calculate total cylinders
*/
21368320:[615,4,17] // PC AT 20Mb hard disk (type 2)
21368320:[615,4,17] // PC AT 20Mb hard drive (type 2)
};
DiskAPI.MBR = {

View file

@ -63,7 +63,7 @@ var DumpAPI = {
FORMAT: "format", // value is one of FORMAT values below
COMMENTS: "comments", // value is either "true" or "false"
DECIMAL: "decimal", // value is either "true" to force all numbers to decimal, "false" or undefined otherwise
MBHD: "mbhd", // value is hard disk size in Mb (formerly "mbsize") (DiskDump only) (DEPRECATED)
MBHD: "mbhd", // value is hard drive size in Mb (formerly "mbsize") (DiskDump only) (DEPRECATED)
SIZE: "size" // value is target disk size in Kb (supersedes "mbhd") (DiskDump only)
},
FORMAT: {

View file

@ -0,0 +1,165 @@
(function(){var f;function p(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function q(a){return"0x"+p(a,2)}function r(a){return"0x"+p(a,4)}function aa(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 ba(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
var ca={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function da(a){return a.replace(/[&<>"']/g,function(a){return ca[a]})}var ea=Date.now||function(){return+new Date};
function t(a,b){var c=0,d=null;if("object"==typeof resources&&(d=resources[a]))b&&b(a,d,c);else if("function"==typeof resources)resources(a,function(c,d){b&&b(a,c,d)});else{var e=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");e.onreadystatechange=function(){4===e.readyState&&(d=e.responseText,200==e.status||!e.status&&d.length&&"file:"==(window?window.location.protocol:"file:")||(c=e.status||-1),b&&b(a,d,c))};e.open("GET",a,!0);e.send()}}
function u(a){window&&window.alert(a)}function v(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)?!0:!1}return!1}function fa(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function ga(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}}var w={init:[],show:[],exit:[]},ha=!1,ia=!0;function ja(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function x(a){w.init.push(a)}
function ka(a){if(ia)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){u("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function z(a){!ia&&a?(ia=!0,ha&&la("init")):ia=a}function la(a){w[a]&&ka(w[a])}ja("onload",function(){ha=!0;ka(w.init)});ja("onpageshow",function(){ka(w.show)});ja(v("Opera")||v("iOS")?"onunload":"onbeforeunload",function(){ka(w.exit)});
function A(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.rb=this.id.substr(0,b),this.qb=this.id.substr(b+1)):this.qb=this.id;this[a]=c;this.C={Za:!1,Ba:!1,jb:!1,M:!1,Ca:!1};this.cb=null;this.C.Ca=!1;this.H={};this.u=null;this.la=d||0;B.push(this)}var ma=void 0;
if(window){ma||(ma=window.location.search.substr(1));for(var na,oa=/\+/g,pa=/([^&=]+)=?([^&]*)/g;na=pa.exec(ma);)na[1].replace(oa," "),na[2].replace(oa," ")}function qa(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}function C(a){var b;b||(b=A);a.prototype=qa(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var B=[],D={};
function ra(a,b){if(void 0!==a){var c;b&&0<(c=b.indexOf("."))&&(a=b.substr(0,c+1)+a);for(c=0;c<B.length;c++)if(B[c].id===a)return B[c]}return null}function E(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){u(c.message+" ("+a+")")}return b}
function F(a,b){for(var c=G(b.parentNode,"c1pjs-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,g=0;g<e.length;g++){var h=e[g];if(1===h.nodeType){var k=h.getAttribute("class");if(k)for(var l=k.split(" "),m=0;m<l.length;m++)switch(k=l[m],k){case "c1pjs-binding":(k=E(h))&&k.binding&&a.T(k.type,k.binding,h,k.value),m=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}
A.prototype={constructor:A,parent:null,toString:function(){return this.name?this.name:this.id||this.type},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.gb=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.$a=function(a,b,c){this.l(a,"notice",c)}),!0;default:return!1}},log:function(){},l:function(){},status:function(a){this.l(this.qb+": "+a)},$a:function(a,b){b||u(a)},X:function(a){this.C.Ca||(this.C.Za=!1!==a,this.C.Za&&(a=this.cb,this.cb=null,a&&a()))}};function H(a,b){if(a.u){a===a.u?b|=0:b=b||a.la;var c=a.u.la&b;return!!b&&c===b||!!(c&a.u.Pe)}return!1}function I(a,b){if(a.C.jb)return a.C.Ba&&(a.C.Ba=!1),a.C.jb=!1;if(a.C.Ca)return a.l(a.toString()+" error"),!1;a.C.Ba=b;return a.C.Ba}
function J(a,b){a.C.Ba&&(b?a.C.jb=!0:void 0===b&&a.l(a.toString()+" busy"));return a.C.Ba}function K(a,b){b&&(a.C.Za?b():a.cb=b);return a.C.Za}function sa(a,b){a.C.Ca=!0;a.$a(b)}function ta(a){A.call(this,"C1PPanel",a);this.C.M=!1}C(ta);ta.prototype.T=function(a,b,c,d){return this.J&&this.J.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:A.prototype.T.call(this,a,b,c,d)};
ta.prototype.ha=function(a,b){a&&!this.C.M&&(this.C.M=!0,this.J=b,this.s=L(b,"cpu"),this.b=L(b,"keyboard"),this.u=L(b,"debugger"),ua())};function ua(){for(var a=!1,b=G(document,"c1pjs","panel"),c=0;c<b.length;c++){var d=b[c],e=E(d),g=ra(e.id);g||(a=!0,g=new ta(e));F(g,d);a&&g.X()}}x(ua);
function va(a){A.call(this,"C1PCPU",a);wa(this);this.C.M=!1;this.C.ma=!1;this.Ta=a.autoStart;this.Ra=0;this.Nb=1;this.eb=2;this.speed=this.Ra;this.Ja=30;this.Ia=5;this.Ma=8;this.Sa=["Slow","Fast","Max"];this.ib=["(1Mhz)","(up to "+this.Ma+"Mhz)","(unlimited)"];this.P=[];this.K=[];this.oa=65536;this.pa=0;this.da=65536;this.ia=0;this.Qa=32;this.bb=2;this.Mb=1;this.o=[this.wc,this.Qd,this.He,this.m,this.m,this.Sd,this.mc,this.m,this.Vd,this.Pd,this.lc,this.m,this.m,this.Md,this.jc,this.m,this.vc,this.Rd,
this.m,this.m,this.m,this.Td,this.nc,this.m,this.zc,this.Od,this.m,this.m,this.m,this.Nd,this.kc,this.m,this.nd,this.fc,this.m,this.m,this.sc,this.hc,this.ae,this.m,this.Xd,this.ec,this.$d,this.m,this.rc,this.bc,this.Yd,this.m,this.tc,this.gc,this.m,this.m,this.m,this.ic,this.be,this.m,this.re,this.dc,this.m,this.m,this.m,this.cc,this.Zd,this.m,this.he,this.ad,this.m,this.m,this.m,this.cd,this.Jd,this.m,this.Ud,this.$c,this.Id,this.m,this.md,this.Xc,this.Gd,this.m,this.xc,this.bd,this.m,this.m,this.m,
this.dd,this.Kd,this.m,this.Bc,this.Zc,this.m,this.m,this.m,this.Yc,this.Hd,this.m,this.ie,this.xb,this.m,this.m,this.m,this.zb,this.fe,this.m,this.Wd,this.wb,this.ee,this.m,this.ld,this.tb,this.ce,this.m,this.yc,this.yb,this.m,this.m,this.m,this.Ab,this.ge,this.m,this.te,this.vb,this.m,this.m,this.m,this.ub,this.de,this.m,this.m,this.xe,this.m,this.m,this.Fe,this.ze,this.Ce,this.m,this.Wc,this.m,this.Le,this.m,this.Ee,this.ue,this.Be,this.m,this.oc,this.ye,this.m,this.m,this.Ge,this.Ae,this.De,this.m,
this.Ne,this.we,this.Me,this.m,this.m,this.ve,this.m,this.m,this.Dd,this.sd,this.yd,this.m,this.Ed,this.ud,this.zd,this.m,this.Je,this.rd,this.Ie,this.m,this.Bd,this.od,this.wd,this.m,this.pc,this.td,this.m,this.m,this.Fd,this.vd,this.Ad,this.m,this.Cc,this.qd,this.Ke,this.m,this.Cd,this.pd,this.xd,this.m,this.Pc,this.Hc,this.m,this.m,this.Qc,this.Jc,this.Tc,this.m,this.kd,this.Gc,this.Vc,this.m,this.Oc,this.Dc,this.Rc,this.m,this.uc,this.Ic,this.m,this.m,this.m,this.Kc,this.Uc,this.m,this.Ac,this.Fc,
this.m,this.m,this.m,this.Ec,this.Sc,this.m,this.Mc,this.Fb,this.m,this.m,this.Nc,this.Hb,this.gd,this.m,this.jd,this.Eb,this.Ld,this.m,this.Lc,this.Bb,this.ed,this.m,this.qc,this.Gb,this.m,this.m,this.m,this.Ib,this.hd,this.m,this.se,this.Db,this.m,this.m,this.m,this.Cb,this.fd,this.m];this.fb=[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]}C(va);f=va.prototype;
f.reset=function(a){this.C.ma&&this.aa();wa(this);this.f=this.a[65532]|this.a[65533]<<8;this.C.Ca=!1;this.u?this.u.reset():a&&(!0===this.Ta||null===this.Ta&&!this.u&&void 0===this.H.run)&&this.va()};
f.T=function(a,b,c){a=!1;switch(b){case "run":this.H[b]=c;c.onclick=function(a){return function(){a.C.ma?a.aa():a.va()}}(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(){M(a,2<=a.speed?a.Ra:a.speed+1,!0)}}(this),a=!0}return a};
f.ba=function(a,b,c){this.a=a;this.O=b;this.qa=c-b+1;this.Ga=this.O+this.qa;this.O?u("unsupported CPU address buffer offset ("+this.O+")"):this.X()};f.ha=function(a,b){if(a&&!this.C.M){this.J=b;(this.u=L(b,"debugger"))&&this.u.Sb();var c=L(b,"video");c&&(this.hb=function(a){return function(){xa(a)}}(c),this.ca=function(a){return function(){a.ca()}}(c));this.C.M=!0;this.reset(!0);this.update()}};function ya(a,b,c,d,e){0>za(a.P,b,c,d,e)&&(a.oa>b&&(a.oa=b),a.pa<c&&(a.pa=c),a.P.push([b,c,d,e]))}
function Aa(a,b,c){for(var d=0;d<a.P.length;d++)b>=a.P[d][0]&&b<=a.P[d][1]&&a.P[d][3].call(a.P[d][2],b,c)}function N(a,b,c,d,e){0>za(a.K,b,c,d,e)&&(a.da>b&&(a.da=b),a.ia<c&&(a.ia=c),a.K.push([b,c,d,e]))}function Ba(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 za(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 M(a,b,c){void 0!==b&&(a.speed=b,a.H.setSpeed&&(a.H.setSpeed.innerHTML=a.Sa[2<=b?0:b+1]),a.l("running at "+a.Sa[b].toLowerCase()+" speed "+a.ib[b]),c&&a.ca());a.U=0;a.Oa=ea();Ca(a)}f.hb=function(){};f.ca=function(){};function O(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 Da(a){O(a,"A",a.h,2);O(a,"X",a.w,2);O(a,"Y",a.F,2);var b=Ea(a);O(a,"C",b&1?1:0);O(a,"Z",b&2?1:0);O(a,"I",b&4?1:0);O(a,"D",b&8?1:0);O(a,"B",b&16?1:0);O(a,"V",b&64?1:0);O(a,"N",b&128?1:0);O(a,"S",a.G,4);O(a,"PC",a.f,4);a.H.speed&&a.ta&&(a.H.speed.innerHTML=a.ta.toFixed(1)+"Mhz")}
function Ca(a,b){var c=30;c<a.Ja&&(c=a.Ja);c<a.Ia&&(c=a.Ia);var d=1;b&&a.speed>a.Ra&&a.ta&&(d=a.ta);d>a.Ma&&2>a.speed&&(d=a.Ma);a.kb=Math.round(1E3/30);a.ja=Math.floor(1E6/c*d);a.ra=Math.floor(1E6/30*d);a.Xa=Math.floor(1E6/a.Ja*d);a.Wa=Math.floor(1E6/a.Ia*d);b||(a.R=a.ra,a.Z=a.Xa,a.V=a.Wa);a.Aa=0}
function Fa(a){var b=ea(),c=a.kb;a.$&&(c=Math.round(c*a.$/a.ra));c=c-(b-a.lb);if(b=b-a.Oa)a.ta=Math.round(a.U/(100*b))/10,864E5<=b&&M(a);0>c?c=0:1==a.speed?a.ta<=a.Ma&&(c=0):2==a.speed&&(c=0);a.Aa+=a.$;return c}
f.va=function(){if(I(this,!0)){this.C.ma||(M(this),this.J&&this.J.start(),this.C.ma=!0,this.H.run&&(this.H.run.innerHTML="Halt"),this.ca());1E6<=this.Aa&&Ca(this,!0);this.$=0;this.lb=ea();try{do{this.step(this.ja);var a=this.L-this.D;this.U+=a;this.$+=a;this.L=this.D=0;this.Z-=this.ja;0>=this.Z&&(this.Z+=this.Xa,this.hb());this.V-=this.ja;0>=this.V&&(this.V+=this.Wa,Da(this));this.R-=this.ja;if(0>=this.R){this.R+=this.ra;break}}while(this.C.ma)}catch(b){this.aa();this.update();I(this,!1);sa(this,
b.stack||b.message);return}setTimeout(function(a){return function(){a.va()}}(this),Fa(this))}else this.update(),this.J&&this.J.stop(this.Oa,this.U)};
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.sa.length||0<c.wa.length||0<c.ya.length;this.L=this.D=a;do{a=this.a[this.f];var d;if(d=c){d=this.u;var e=a,g=!1;Ga(d,this.f,d.sa,"exec")?g=!0:(d.L++,d.B[e][1]++,d.xa[d.La++]=d.s.f,d.La>=d.xa.length&&(d.La=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.oa&&this.b<=this.pa&&Aa(this,this.b,this.f);if(d=c)d=this.u,e=!1,Ga(d,this.b,d.wa,"read")&&(e=!0),d=!!e;if(d){b=!1;this.aa();
break}this.b=-1}else if(0<=this.g){this.g>=this.da&&this.g<=this.ia&&Ba(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 "+r(e)+": "+g),h=!0);Ga(d,e,d.ya,"write")&&(h=!0);d=!!h}if(d){b=!1;this.aa();break}this.g=-1}this.D-=this.fb[a]}while(0<this.D);return b};function Ha(a){a.R=0;a.L-=a.D;a.D=0}f.aa=function(){J(this,!0);this.L-=this.D;this.D=0;this.C.ma&&(this.C.ma=!1,this.H.run&&(this.H.run.innerHTML="Run"))};
f.update=function(){this.hb();Da(this)};function Ia(a){return a.C.ma?a.U+a.L-a.D:0}f.S=function(a){return this.a[a]};f.W=function(a,b){this.a[a]=b};function Ea(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 Ja(a){a.B|=8;a.o[97]=a.Yb;a.o[101]=a.$b;a.o[105]=a.Xb;a.o[109]=a.Ub;a.o[113]=a.Zb;a.o[117]=a.ac;a.o[121]=a.Wb;a.o[125]=a.Vb;a.o[225]=a.ne;a.o[229]=a.pe;a.o[233]=a.me;a.o[237]=a.je;a.o[241]=a.oe;a.o[245]=a.qe;a.o[249]=a.le;a.o[253]=a.ke}function Ka(a){a.B&=-9;a.o[97]=a.xb;a.o[101]=a.zb;a.o[105]=a.wb;a.o[109]=a.tb;a.o[113]=a.yb;a.o[117]=a.Ab;a.o[121]=a.vb;a.o[125]=a.ub;a.o[225]=a.Fb;a.o[229]=a.Hb;a.o[233]=a.Eb;a.o[237]=a.Bb;a.o[241]=a.Gb;a.o[245]=a.Ib;a.o[249]=a.Db;a.o[253]=a.Cb}
function P(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 Q(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 wa(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.ta=0;a.U=a.L=a.D=0}
f.wc=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=Ea(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.Qd=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.Sd=function(){this.b=this.a[this.f++];this.i=this.j=this.h|=this.a[this.b]};
f.mc=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.Vd=function(){this.B=Ea(this);this.a[this.G--]=this.B;this.G|=256};f.Pd=function(){this.b=this.f++;this.i=this.j=this.h|=this.a[this.b]};f.lc=function(){this.c=this.h<<1;this.i=this.j=this.h=this.c&255};f.Md=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.h|=this.a[this.b]};
f.jc=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.vc=function(){this.f+=(this.i&128?0:(this.D--,this.a[this.f]<<24>>24))+1};f.Rd=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.Td=function(){this.b=this.a[this.f++]+this.w&255;this.i=this.j=this.h|=this.a[this.b]};
f.nc=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.zc=function(){this.c=0};f.Od=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.Nd=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.kc=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.nd=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.fc=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.sc=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.hc=function(){this.b=this.a[this.f++];this.i=this.j=this.h&=this.a[this.b]};
f.ae=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.Xd=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.ec=function(){this.b=this.f++;this.i=this.j=this.h&=this.a[this.b]};
f.$d=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.rc=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.bc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.h&=this.a[this.b]};
f.Yd=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.tc=function(){this.f+=(this.i&128?(this.D--,this.a[this.f]<<24>>24):0)+1};f.gc=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.ic=function(){this.b=this.a[this.f++]+this.w&255;this.i=this.j=this.h&=this.a[this.b]};
f.be=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.re=function(){this.c=256};f.dc=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.cc=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.Zd=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.he=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.ad=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.cd=function(){this.b=this.a[this.f++];this.i=this.j=this.h^=this.a[this.b]};f.Jd=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.Ud=function(){this.a[this.G--]=this.h;this.G|=256};f.$c=function(){this.b=this.f++;this.i=this.j=this.h^=this.a[this.b]};
f.Id=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.md=function(){this.b=this.f;this.f=this.a[this.b]|this.a[this.b+1]<<8};f.Xc=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.h^=this.a[this.b]};f.Gd=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.xc=function(){this.f+=((this.v&255^this.A^this.v>>1)&128?0:(this.D--,this.a[this.f]<<24>>24))+1};f.bd=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.dd=function(){this.b=this.a[this.f++]+this.w&255;this.i=this.j=this.h^=this.a[this.b]};f.Kd=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.Bc=function(){this.B&=251};f.Zc=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.Yc=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.Hd=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.ie=function(){this.G=this.G+2&255|256;this.f=(this.a[this.G-1|256]|this.a[this.G]<<8)+1};f.xb=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.Yb=function(){this.b=this.a[this.f++]+this.w&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.h=P(this,this.h,this.a[this.b])};
f.zb=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.$b=function(){this.b=this.a[this.f++];this.h=P(this,this.h,this.a[this.b])};f.fe=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.Wd=function(){this.G=this.G+1&255|256;this.i=this.j=this.h=this.a[this.G]};
f.wb=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.Xb=function(){this.b=this.f++;this.h=P(this,this.h,this.a[this.b])};f.ee=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.ld=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.tb=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.Ub=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=P(this,this.h,this.a[this.b])};f.ce=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.yc=function(){this.f+=((this.v&255^this.A^this.v>>1)&128?(this.D--,this.a[this.f]<<24>>24):0)+1};f.yb=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.Zb=function(){this.b=this.a[this.f++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.F;this.h=P(this,this.h,this.a[this.b])};
f.Ab=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.ac=function(){this.b=this.a[this.f++]+this.w&255;this.h=P(this,this.h,this.a[this.b])};f.ge=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.te=function(){this.B|=4};
f.vb=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.Wb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.h=P(this,this.h,this.a[this.b])};f.ub=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.Vb=function(){this.b=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.h=P(this,this.h,this.a[this.b])};f.de=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.xe=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.Fe=function(){this.g=this.a[this.f++];this.a[this.g]=this.F};
f.ze=function(){this.g=this.a[this.f++];this.a[this.g]=this.h};f.Ce=function(){this.g=this.a[this.f++];this.a[this.g]=this.w};f.Wc=function(){this.i=this.j=this.F=this.F-1&255};f.Le=function(){this.i=this.j=this.h=this.w};f.Ee=function(){this.g=this.a[this.f++]|this.a[this.f++]<<8;this.a[this.g]=this.F};f.ue=function(){this.g=this.a[this.f++]|this.a[this.f++]<<8;this.a[this.g]=this.h};f.Be=function(){this.g=this.a[this.f++]|this.a[this.f++]<<8;this.a[this.g]=this.w};
f.oc=function(){this.f+=(this.c&256?0:(this.D--,this.a[this.f]<<24>>24))+1};f.ye=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.Ge=function(){this.g=this.a[this.f++]+this.w&255;this.a[this.g]=this.F};f.Ae=function(){this.g=this.a[this.f++]+this.w&255;this.a[this.g]=this.h};f.De=function(){this.g=this.a[this.f++]+this.F&255;this.a[this.g]=this.w};f.Ne=function(){this.i=this.j=this.h=this.F};
f.we=function(){this.g=(this.a[this.f++]|this.a[this.f++]<<8)+this.F;this.a[this.g]=this.h};f.Me=function(){this.G=this.w|256};f.ve=function(){this.g=(this.a[this.f++]|this.a[this.f++]<<8)+this.w;this.a[this.g]=this.h};f.Dd=function(){this.b=this.f++;this.i=this.j=this.F=this.a[this.b]};f.sd=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.yd=function(){this.b=this.f++;this.i=this.j=this.w=this.a[this.b]};
f.Ed=function(){this.b=this.a[this.f++];this.i=this.j=this.F=this.a[this.b]};f.ud=function(){this.b=this.a[this.f++];this.i=this.j=this.h=this.a[this.b]};f.zd=function(){this.b=this.a[this.f++];this.i=this.j=this.w=this.a[this.b]};f.Je=function(){this.i=this.j=this.F=this.h};f.rd=function(){this.b=this.f++;this.i=this.j=this.h=this.a[this.b]};f.Ie=function(){this.i=this.j=this.w=this.h};f.Bd=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.F=this.a[this.b]};
f.od=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.h=this.a[this.b]};f.wd=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.i=this.j=this.w=this.a[this.b]};f.pc=function(){this.f+=(this.c&256?(this.D--,this.a[this.f]<<24>>24):0)+1};f.td=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.Fd=function(){this.b=this.a[this.f++]+this.w&255;this.i=this.j=this.F=this.a[this.b]};
f.vd=function(){this.b=this.a[this.f++]+this.w&255;this.i=this.j=this.h=this.a[this.b]};f.Ad=function(){this.b=this.a[this.f++]+this.F&255;this.i=this.j=this.w=this.a[this.b]};f.Cc=function(){this.A=this.v=0};f.qd=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.Ke=function(){this.i=this.j=this.w=this.G&255};f.Cd=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.pd=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.xd=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.Pc=function(){this.b=this.f++;this.i=this.j=this.c=this.F-this.a[this.b];this.c^=256};f.Hc=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.Qc=function(){this.b=this.a[this.f++];this.i=this.j=this.c=this.F-this.a[this.b];this.c^=256};f.Jc=function(){this.b=this.a[this.f++];this.i=this.j=this.c=this.h-this.a[this.b];this.c^=256};f.Tc=function(){this.g=this.a[this.f++];this.i=this.j=this.a[this.g]=this.a[this.g]-1&255};f.kd=function(){this.i=this.j=this.F=this.F+1&255};f.Gc=function(){this.b=this.f++;this.i=this.j=this.c=this.h-this.a[this.b];this.c^=256};f.Vc=function(){this.i=this.j=this.w=this.w-1&255};
f.Oc=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.Dc=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.Rc=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.uc=function(){this.f+=(this.j&255?(this.D--,this.a[this.f]<<24>>24):0)+1};
f.Ic=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.Kc=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.Uc=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.Ac=function(){Ka(this)};
f.Fc=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.Ec=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.Sc=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.Mc=function(){this.b=this.f++;this.i=this.j=this.c=this.w-this.a[this.b];this.c^=256};
f.Fb=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.ne=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.Nc=function(){this.b=this.a[this.f++];this.i=this.j=this.c=this.w-this.a[this.b];this.c^=256};
f.Hb=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.pe=function(){this.b=this.a[this.f++];this.h=Q(this,this.h,this.a[this.b])};f.gd=function(){this.g=this.a[this.f++];this.i=this.j=this.a[this.g]=this.a[this.g]+1&255};f.jd=function(){this.i=this.j=this.w=this.w+1&255};
f.Eb=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.me=function(){this.b=this.f++;this.h=Q(this,this.h,this.a[this.b])};f.Ld=function(){};f.Lc=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.Bb=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.je=function(){this.b=this.a[this.f++]|this.a[this.f++]<<8;this.h=Q(this,this.h,this.a[this.b])};f.ed=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?0:(this.D--,this.a[this.f]<<24>>24))+1};
f.Gb=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.oe=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.Ib=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.qe=function(){this.b=this.a[this.f++]+this.w&255;this.h=Q(this,this.h,this.a[this.b])};f.hd=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.se=function(){Ja(this)};
f.Db=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.le=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.Cb=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.ke=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.fd=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.He=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,p(this.h,2)).replace(/%X/g,p(this.w,2)).replace(/%Y/g,p(this.F,2));this.l(b);Ha(this);break;default:this.f-=2,this.l("undefined opSim: "+q(a)+" at "+r(this.f)),this.aa()}};f.m=function(){var a=this.a[--this.f];this.l("undefined opcode: "+q(a)+" at "+r(this.f));this.aa()};
x(function(){for(var a=G(document,"c1pjs","cpu"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new va(d);F(d,c)}});function R(a){A.call(this,"C1PROM",a);this.b=this.a=null;this.g=a.size;if(this.o=a.image){a=this.o;var b=ba(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;t(a,function(a,b,g){La(c,a,b,g)})}}C(R);
R.prototype.ba=function(a,b,c,d){this.a=a;this.v=b;a=c-b+1;this.g||(this.g=a);a!=this.g?sa(this,"computer-specified ROM size ("+r(a)+") does not match component-specified size ("+r(this.g)+")"):(d&&(this.s=d,N(d,b,c,this,this.W)),Ma(this))};R.prototype.ha=function(a,b){a&&!this.C.M&&(this.C.M=!0,this.u=L(b,"debugger"))};R.prototype.W=function(a,b){if(void 0!==b){this.u&&S(this.u,this,a,b,this.u.pb,!0);var c=a-this.v;this.a[this.v+c]=this.b?this.b[c]:0}};
function La(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);Ma(a)}}
function Ma(a){if(!K(a))if(!a.o)a.X();else if(a.b&&a.a){var b=a.b.length;if(b!=a.g)sa(a,"ROM image size ("+r(b)+") does not match component-specified size ("+r(a.g)+")");else{for(var c=0;c<b;c++)a.a[a.v+c]=a.b[c];a.X()}}}x(function(){for(var a=G(document,"c1pjs","rom"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new R(d);F(d,c)}});function Na(a){A.call(this,"C1PRAM",a)}C(Na);Na.prototype.ba=function(a){this.a=a;this.X()};
x(function(){for(var a=G(document,"c1pjs","ram"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new Na(d);F(d,c)}});
function Oa(a){A.call(this,"C1PKeyboard",a);this.C.M=!1;this.Ia=a.model;this.da=8;this.fb=10;this.Xa=13;this.ia=27;this.Oa=this.da;this.Wa=this.fb;this.Ja=this.Xa;this.$=this.ia;this.L=241;this.Z=224;this.Sa=3;this.Ta=15;this.K=1;this.D=[];this.D["break"]=this.Z;this.D.esc=this.$;this.D["ctrl-c"]=this.Sa;this.D["ctrl-o"]=this.Ta;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.Oa]=22E3;this.b[this.Wa]=21504;this.b[this.Ja]=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.L]=1536;this.b[this.$]=1280;this.b[240]=512;this.b[242]=256;this.b[244]=0;this.reset()}C(Oa);
f=Oa.prototype;f.reset=function(){this.Na(this.Ia);this.g=this.K;this.oa=0;this.o=[this.K,0,0,0,0,0,0,0];this.P=[];if(this.v)for(var a in this.v)isNaN(+a)||this.v[a]&&clearTimeout(this.v[a]);this.v=[];this.Aa=this.A=0;this.pa=-1;this.ja=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 Pa(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=!Qa(a,b);a.u&&H(a.u,a.u.za)&&a.u.message("keyPress("+q(b)+"): "+(c?"pass":"consume"));return c}}(this),!0;case "keyUp":return this.H[b]=c,c.onkeyup=function(a){return function(b){return Pa(a,b,
!1)}}(this),!0;case "break":return this.H[b]=c,c.onclick=function(a){return function(){a.J&&a.J.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.ca();return!Qa(a,c)}}(this,b,this.D[b]),!0}return!1};f.ba=function(a,b,c,d){this.a=a;this.ra=b;this.ib=c-b+1;this.lb=this.ra+this.ib;d&&(this.s=d,N(d,b,c,this,this.W));this.X()};f.Na=function(a){this.O=a;this.R=255;600!=this.O&&(this.R=0,this.l("updated keyboard model: "+this.O))};
f.ha=function(a,b){a&&!this.C.M&&(this.C.M=!0,this.J=b,this.u=L(b,"debugger"))};f.X=function(){this.U=(this.kb=v("iOS"))||v("Android");this.u&&H(this.u,this.u.za)&&this.u.message("mobile keyboard support: "+(this.U?"true":"false")+" ("+window.navigator.userAgent+")");A.prototype.X.call(this)};function Ra(a,b){var c=b?100:250;a.s&&a.s.ta&&(c/=a.s.ta);return c}function Sa(a,b){!a.A||void 0!==b&&b==a.A||(a.u&&H(a.u,a.u.za)&&a.u.message("autoClear("+q(a.A)+")"),clearTimeout(a.v[a.A]),T(a,a.A,!1,4))}
function U(a,b,c){a.B=b;Ta(a,c||300)}function Ta(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);Qa(a,c)}0<a.B.length&&setTimeout(function(a){return function(){Ta(a,b)}}(a),b)}
function Pa(a,b,c){var d,e=!c;b=b.keyCode;c&&(a.Aa=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.L-224?(a.g&=-65,c&&(a.g|=64),b+=224,e=!1):20==b?(c=!c,a.g&=~a.K,c&&(a.g|=a.K),b+=224,e=!1):91==b?(a.g&=-9,c&&(a.g|=8),e=!1,d=!0):d=9==b?e=!1:b==a.ia||b==a.da?c?!Qa(a,b):!1:!0;e&&(a.g&=-9,a.U||b!=a.Aa||Sa(a));void 0===d&&(d=!T(a,b,c,2));a.u&&H(a.u,a.u.za)&&a.u.message("key"+(c?"Down":"Up")+"("+q(b)+"): "+(d?"pass":"consume"));return d}
function Qa(a,b){var c=!1;b==a.Z?a.J&&(a.J.reset(!0),c=!0):(a.U&&65<=b&&90>=b&&(b+=32),Sa(a,b),T(a,b,!0,0)&&(a.s.speed==a.s.eb?T(a,b,!1,1):(c=!1,a.v[b]&&(clearTimeout(a.v[b]),c=!0),c=Ra(a,c),a.v[a.A=b]=setTimeout(function(a){return function(){T(a,b,!1,3)}}(a),c),a.u&&H(a.u,a.u.za)&&a.u.message("keyPressSimulate("+q(b)+"): setTimeout()")),c=!0));a.u&&H(a.u,a.u.za)&&a.u.message("keyPressSimulate("+q(b)+"): "+(c?"true":"false"));return c}
function T(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.L),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.L?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=0==d&&!a.P.length,a.P.push(a.o.slice()),Ua(a,c),e=!0);return e}f.S=function(){};f.W=function(a){this.oa=this.s.S(a)^this.R;this.V++;Ua(this,!1,a)};
function Ua(a,b,c){var d=Ia(a.s);b||(a.s.speed==a.s.eb?b=void 0!==c&&32<=a.V:(b=d-a.qa,b=0>b||8192<=b));b&&(b=a.P.shift(),void 0!==b&&(a.ja=b),a.V=0,a.qa=d);for(b=d=0;8>b;b++)a.oa&1<<b&&(d|=a.ja[b]);d^=a.R;if(void 0!==c)a.a[c]=d;else if(c=a.ra,d!=a.pa)for(;c<a.lb;c++)a.a[c]=d;a.pa=d}x(function(){for(var a=G(document,"c1pjs","keyboard"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new Oa(d);F(d,c)}});
function Va(a,b,c,d){A.call(this,"C1PVideo",a);this.ja=a.model;this.Z=a.charCols;this.$=a.charRows;this.pa=a.screenWidth;this.qa=a.screenHeight;this.A=a.charWidth;this.B=a.charHeight;Wa(this);this.D=b;this.ia=c;this.o=d}C(Va);f=Va.prototype;f.reset=function(a){this.Na(this.ja);if(this.a)for(var b=this.K;b<this.P;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(){Xa(a);xa(a)}}(this),!0}return!1};
f.ba=function(a,b,c,d){this.a=a;this.K=b;this.oa=c-b+1;this.P=this.K+this.oa;d&&(this.s=d,ya(d,56832,56832,this,this.S),N(d,56832,56832,this,this.W));this.reset(!0)};function Wa(a,b,c,d,e){a.J=void 0!==b?b:a.Z;a.ra=void 0!==c?c:a.$;a.g=a.J*a.ra;a.P=a.K+a.g;a.V=void 0!==d?d:0;a.da=void 0!==e?e:c;a.R=Math.floor(a.pa/a.J);a.U=Math.floor(a.qa/a.da)}f.ca=function(){this.D.focus()};
f.Na=function(a){this.O=a;600==this.O?(Wa(this,this.Z,this.$,3,25),1024==this.g&&this.s&&(this.v=this.P+this.g-1,N(this.s,this.v,this.v,this,this.Lb))):(this.l("updated video model: "+this.O),Wa(this,64,32));Xa(this);xa(this)};f.ha=function(a,b){if(a&&!this.C.M&&K(this)){if(this.C.M=!0,this.u=L(b,"debugger"),this.b=L(b,"keyboard"))this.b.T("canvas","keyDown",this.D),this.b.T("canvas","keyPress",this.D),this.b.T("canvas","keyUp",this.D)}else!a&&this.C.M&&(this.C.M=!1)};
f.X=function(){this.A||(this.A=Math.floor(this.o.width/16));this.B||(this.B=Math.floor(this.o.height/16));A.prototype.X.call(this)};f.S=function(a,b){var c=this.s.S(a);void 0!==b&&this.u&&S(this.u,this,a,b,this.u.ab);this.s.W(a,c&127|(Math.floor(Ia(this.s)/8333)&1?128:0))};f.W=function(a,b){void 0!==b&&this.u&&S(this.u,this,a,b,this.u.ab)};
f.Lb=function(a,b){if(void 0!==b){this.u&&S(this.u,this,a,b,this.u.ab,!0);this.Na(540);this.b&&this.b.Na(542);var c=this.s,d=c.K,e=[],g=za(d,this.v,this.v,this,this.Lb);if(0<=g){e.push(d[g][0]);e.push(d[g][1]);d.splice(g,1);for(var h=65536,k=0,g=0;g<d.length;g++)h>d[g][0]&&(h=d[g][0]),k<d[g][1]&&(k=d[g][1]);e.push(h);e.push(k)}4==e.length&&(c.da=e[2],c.ia=e[3])}};function Xa(a){a.L=Array(a.g);for(var b=0;b<=a.g;b++)a.L[b]=-1}
function xa(a){var b=0;if(a.C.M)for(;b<a.g;){var c=a.a[a.K+b];if(a.L[b]!=c){var d=Math.floor(b/a.J);if(d>=a.V&&(d-=a.V,d<a.da)){var e=c*a.A;a.ia.drawImage(a.o,e%a.o.width,Math.floor(e/a.o.width)*a.B,a.A,a.B,b%a.J*a.R,d*a.U,a.R,a.U)}a.L[b]=c}b++}}
x(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(void 0===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 Va(d,e,h,g);g.onload=function(a){return function(){a.X()}}(e,d.charSet);g.src=d.charSet;F(e,c)}});
function Ya(a){A.call(this,"C1PSerialPort",a);this.C.M=!1;this.O=a.demo;this.reset()}C(Ya);f=Ya.prototype;f.reset=function(){if(2!=this.g){this.v=this.B=0;var a=1;if(this.rb){var b=this.rb.match(/\d+/);null!==b&&(a=parseInt(b[0],10))}this.o='10 PRINT "HELLO OSI #'+a+'"\n';this.g=this.A=0}};f.start=function(){this.b&&this.O&&(U(this.b," C\n\n",3E3),setTimeout(function(a){return function(){a.g=1;U(a.b,"LOAD\n")}}(this),12E3));this.O=!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&&t(d.H.listSerial.value,function(a,b,c){Za(d,a,b,c)})},!0;case "mountSerial":return!v("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(){Za(d,
b.name,c.result.toString(),0)};c.readAsText(b);return!1}):c.parentNode.removeChild(c),!0}return!1};f.ba=function(a,b,c,d){this.a=a;this.D=b;this.L=c-b+1;this.K=this.D+this.L;if(this.s=d)ya(d,b,c,this,this.S),N(d,b,c,this,this.W);this.X()};f.ha=function(a,b){a&&!this.C.M&&(this.C.M=!0,this.J=b,this.b=L(b,"keyboard"),this.u=L(b,"debugger"))};
function Za(a,b,c,d){c?(a.o=c,a.A=0,a.g=0,a.J&&a.b&&a.s.C.ma?(a.l("auto-loading "+b),a.s.ca(),"."!=a.o.charAt(0)?(a.g=1,U(a.b,"NEW\nLOAD\n")):(a.g=2,a.J.reset(!0),U(a.b,"ML"))):a.l(b+" ready to load")):a.l(b+" load error ("+d+")")}f.S=function(a,b){void 0!==b&&(a&1?$a(this):this.o&&!this.A&&$a(this))};f.W=function(a,b){void 0!==b&&this.u&&S(this.u,this,a,b,this.u.Qb,!0)};
function $a(a){if(void 0!==a.o){a.B=0;a.v=0;if(a.A<a.o.length){var b=a.o.charCodeAt(a.A++);10==b&&(b=13);a.B=b;a.v=1}else 1==a.g&&a.b&&U(a.b," \nRUN\n"),a.g=0;for(b=a.D+0;b<a.K;b+=2)a.a[b]=a.v?1:0;for(b=a.D+1;b<a.K;b+=2)a.a[b]=a.v?a.B:0}}x(function(){for(var a=G(document,"c1pjs","serial"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new Ya(d);F(d,c)}});function ab(a){A.call(this,"C1PDiskController",a);this.C.M=!1;this.reset(!0)}C(ab);f=ab.prototype;
f.reset=function(a){bb(this);this.b=-1;a&&(this.g=[],this.g[0]={Qe:0,sb:40,Rb:!0,Fa:20,na:0,Ea:-1,Va:[]})};
function bb(a){a.K={I:64,read:function(){},update:function(a){return function(c){void 0!==c&&(this.I=c);a.B.I&4||V(a,0,this)}}(a)};a.o={I:255,read:function(){this.update()},update:function(a){return function(c){void 0===c?c=a.o.I:cb(a,c,a.A.I);c=(c|190)&-2;if(0<=a.b&&a.g[a.b].Va.length){var d=a.g[a.b];d.Rb&&(c&=-33);d.na||(c&=-3);10>=--d.Fa&&(0<d.Fa?(c&=-129,db(a)):(d.Fa=100,0<=a.b&&(a.g[a.b].Ea=0,eb(a))))}this.I=c;a.B.I&4&&V(a,0,this)}}(a)};a.B={I:0,read:function(){},update:function(a){return function(c){void 0!==
c&&(this.I=c&-193);V(a,1,this);a.o.update();a.K.update()}}(a)};a.L={I:255,read:function(){},update:function(a){return function(c){void 0!==c&&(this.I=c);a.D.I&4||V(a,2,this)}}(a)};a.A={I:255,read:function(){},update:function(a){return function(c){void 0===c?c=a.A.I:cb(a,a.o.I,c);if(0<=a.b&&a.b<a.g.length){var d=a.g[a.b];d.Va.length&&a.A.I&8&&!(c&8)&&(c&4?d.na--:d.na++,a.u&&H(a.u,a.u.Ha)&&a.u.message("stepping "+(c&4?"down":"up")+" to track "+d.na),d.na>=d.sb&&(d.na=d.sb),0>d.na&&(d.na=0),d.Fa=20,
a.o.update(a.o.I|128),db(a))}this.I=c;a.D.I&4&&V(a,2,this)}}(a)};a.D={I:0,read:function(){},update:function(a){return function(c){void 0!==c&&(this.I=c&-193);V(a,3,this);a.A.update();a.L.update()}}(a)};a.P={I:0,read:function(){},update:function(a){return function(c){void 0!==c&&(3==(c&3)&&(a.v.I=14),this.I=c);a.v.update()}}(a)};a.v={I:14,read:function(){},update:function(a){return function(c){void 0===c&&(c=a.v.I);c&=-2;0<=a.b&&0<=a.g[a.b].Ea&&(c|=1);this.I=c;V(a,16,this)}}(a)};a.O={I:0,read:function(a){return function(){eb(a)}}(a),
update:function(a){return function(c){void 0!==c&&(this.I=c);V(a,17,this)}}(a)};a.R={I: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 "+aa(b)+"...");t(c,function(b,c,e){fb(a,b,c,e)})}}}(this),!0}return!1};
f.ba=function(a,b,c,d){this.a=a;this.J=b;if(this.s=d)ya(d,b,c,this,this.S),N(d,b,c,this,this.W);this.X()};f.ha=function(a,b){a&&!this.C.M&&(this.C.M=!0,this.u=L(b,"debugger"))};
function fb(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],k=h.sectors;if(void 0===(g=h.trackNum)||void 0===k)throw Error("track "+c+" missing data");g!=c&&u("track "+g+" out of order (expected "+c+")");d=[];var l,m,n;if(g){gb(d,h,"trackSig");hb(d,h);W(d,h,"trackType");for(var y=0;y<k.length;y++){l=k[y];
m=l.sectorData;W(d,l,"sectorSig");W(d,l,"sectorNum");W(d,l,"sectorPages");for(n=0;n<m.length;n++)d.push(m[n]);gb(d,l,"sectorEndSig")}}else for(l=k[0],m=l.sectorData,W(d,h,"trackLoad",2),W(d,l,"sectorPages"),n=0;n<m.length;n++)d.push(m[n]);e[g].Kb=d;a.u&&H(a.u,a.u.Ha)&&a.u.message("track "+g+": "+d.length+" bytes")}a.g[0].Va=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(zb){a.l("disk data error: "+zb.message)}}}
function hb(a,b){var c=b.trackNum;if(void 0===c)throw Error("missing bcd value: trackNum");a.push(Math.floor(c/10)<<4|c%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 gb(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 ib(a,b,c){b&=63;16>b?b&=3:32>b&&(b&=17);switch(b){case 0:a=a.B.I&4?a.o:a.K;break;case 1:a=a.B;break;case 2:a=a.D.I&4?a.A:a.L;break;case 3:a=a.D;break;case 16:a=c?a.P:a.v;break;case 17:a=a.O;break;default:a=a.R}return a}f.S=function(a,b){if(void 0!==b){var c=ib(this,a-this.J,!1);this.u&&S(this.u,this,a,b,this.u.Ha,!1,c.Jb);c.read()}};
f.W=function(a,b){if(void 0!==b){var c=this.s.S(a),d=ib(this,a-this.J,!0);if(this.u&&H(this.u,this.u.Ha|this.u.pb)&&(S(this.u,this,a,b,this.u.Ha,!0,d.Jb),d.Ob))for(var e=128,g=d.I^c;g&&e;)g&e&&this.u.message(" changed "+d.Jb+"."+d.Ob[e]+" to "+(c&e?"1":"0")),e>>=1;d.update(c)}};function cb(a,b,c){var d=-1;void 0!==b&&void 0!==c&&(d=0,c&32||(d|=2),a.o.I&64||(d|=1));a.b!=d&&(a.b=d,a.v.update())}function db(a){0<=a.b&&(a.g[a.b].Ea=-1,a.O.update(255),a.v.update())}
function eb(a){var b=null;if(0<=a.b){var b=a.g[a.b],c=b.Va[b.na];void 0!==c&&(0<=b.Ea&&b.Ea<c.Kb.length?(b.Fa=100,b=c.Kb[b.Ea++],a.O.update(b),a.v.update()):(b.Fa=10,db(a)))}}function V(a,b,c){a.s.W(b+a.J,c.I)}x(function(){for(var a=G(document,"c1pjs","disk"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new ab(d);F(d,c)}});
function jb(a){A.call(this,"C1PDebugger",a);this.u=this;this.L=-1;this.ua=0;this.nb=null;this.Ya=!1;this.ga=0;this.sa=[];this.wa=[];this.ya=[];this.La=0;this.xa=[];this.B=[];this.pb=1;this.za=16;this.ab=32;this.Ha=64;this.Qb=128;this.la=this.Z=0;this.Ua={port:1,kbd:16,video:32,disk:64,serial:128};this.Qa=28;this.bb=56;this.Ka="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.V=["HLT","MSG"];kb(this,!0);this.fa=[[10],[34,1,this.D],[this.bb,1],[],[],[34,1,this.b],[2,1,this.b],[],[36],[34,1,this.v],[2,0,this.P],[],[],[34,2,this.N],[2,2,this.N],[],[9,1,this.ea],[34,1,this.J],[],[],[],[34,1,this.g],[2,1,this.g],[],[13],[34,2,this.A],[],[],[],[34,2,this.o],[2,2,this.o],[],[this.Qa,2,this.Pa],[1,1,this.D],[],[],[6,1,this.b],[1,1,this.b],[39,1,this.b],[],[38],[1,1,this.v],[39,0,this.P],[],[6,2,this.N],[1,2,this.N],[39,2,this.N],[],[7,1,this.ea],[1,1,this.J],[],[],[],[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.P],[],[27,2,this.Pa],[23,2,this.N],[32,2,this.N],[],[11,1,this.ea],[23,1,this.J],[],[],[],[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.P],[],[27,2,this.ob],[0,2,this.N],[40,2,this.N],[],[12,1,this.ea],
[0,1,this.J],[],[],[],[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.N],[47,2,this.N],[48,2,this.N],[],[3,1,this.ea],[47,1,this.J],[],[],[49,1,this.g],[47,1,this.g],[48,1,this.U],[],[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.N],[29,
2,this.N],[30,2,this.N],[],[4,1,this.ea],[29,1,this.J],[],[],[31,1,this.g],[29,1,this.g],[30,1,this.U],[],[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.N],[17,2,this.N],[20,2,this.N],[],[8,1,this.ea],[17,1,this.J],[],[],[],[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.N],[43,2,this.N],[24,2,this.N],[],[5,1,this.ea],[43,1,this.J],[],[],[],[43,1,this.g],[24,1,this.g],[],[45],[43,2,this.A],[],[],[],[43,2,this.o],[24,2,this.o],[]]}C(jb);f=jb.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="",lb(a,b))}}(this,c),!0;case "debugEnter":return this.H[b]=c,ga(c,function(){return d.R?(b=d.R.value,lb(d,b),!0):!1}),!0;case "step":return this.H[b]=c,ga(c,function(a){var b=!1;J(d,!0)||(I(d,!0),b=d.step(a?1:0),I(d,!1));return b}),!0}return!1};
f.ba=function(a,b,c){this.a=a;this.O=b;this.qa=c-b+1;this.Ga=this.O+this.qa;this.X()};f.ha=function(a,b){a&&!this.C.M&&(this.C.M=!0,this.s=L(b,"cpu"))};f.ca=function(){this.R.focus()};
function kb(a,b){a.P=0;a.v=1;a.o=2;a.A=3;a.Pa=4;a.ob=5;a.g=6;a.U=7;a.D=8;a.J=9;a.N=10;a.b=11;a.ea=a.Pa;var c="",d,e;if(b)for(a.ka="A #$nn $nnnn,X $nnnn,Y $nnnn ($nnnn) $nn,X $nn,Y ($nn,X) ($nn),Y $nnnn $nn".split(" "),d=0;d<a.ka.length;d++)e=a.ka[d],c+="("+e.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.ka="A nn [nnnn+X] [nnnn+Y] nnnn [nnnn] [nn+X] [nn+Y] [[nn+X]] [[nn]+Y] [nnnn] [nn]".split(" "),
d=0;d<a.ka.length;d++)e=a.ka[d],c+="("+e.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.Oe=new RegExp(c);a.Pb=[27,a.Qa,9,7,11,12,3,4,8,5]}f.aa=function(){this.s.aa()};function S(a,b,c,d,e,g,h){(a.la&e)==e&&(e=a.s.S(c),a.message(b.id+"."+(g?"setByte":"getByte")+"("+r(c)+")"+(void 0!==d?" @"+r(d):"")+": "+(h?h+"=":"")+q(e)))}f.message=function(a){this.l(a);Ha(this.s)};f.Sb=function(){this.l("Type ? for list of debugger commands\n")};
f.va=function(){if(!mb(this))return!1;this.s.va();return!0};f.step=function(a){if(!mb(this))return!1;var b;try{b=this.s.step(a)}catch(c){b=void 0,sa(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.ua=this.s.f;a||this.Da?nb(this):ob(this)};function mb(a){a.s&&K(a.s)&&!J(a.s)?(a=a.s,a.C.Ca?(a.l(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}
f.reset=function(){var a;this.xa.length||(this.xa=Array(1E3));for(a=0;a<this.xa.length;a++)this.xa[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.Da||this.l("running")};f.stop=function(a,b){if(!this.Da&&(this.l("stopped"),b)){var c=ea();this.l(c-a+"ms ("+b+" cycles)")}this.update();this.ca();this.Da||(this.L=0);pb(this,this.s.f)};function qb(a,b){return a+(b<<24>>24)}
f.S=function(a){var b;a>=this.O&&a<this.Ga&&(Aa(this.s,a),b=this.a[this.O+a],b&=255);return b};f.W=function(a,b){a<this.O||a>=this.Ga?this.l("invalid address: "+r(a)):(this.a[this.O+a]=b&255,Ba(this.s,a),this.s.update())};function rb(a,b){X(a.sa,b,void 0)||a.sa.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 sb(a,b){void 0!==b&&(pb(a,a.K),rb(a,b)&&(a.K=b))}
function pb(a,b){void 0!==a.K&&b==a.K&&X(a.sa,a.K,!0)&&(a.K=void 0);a.Da=!1}function Ga(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: "+r(b)+" ("+d+")");e=!0;break}return e}
function tb(a,b,c){var d=p(b,4),e=a.S(b++),g=a.fa[e],h=void 0===e?0:e,k=[],l=void 0===g[1]?0:g[1];do{d+=" "+p(h,2);if(!l--)break;h=a.S(b++);if(void 0===h)break;k.push(h)}while(1);void 0===g[0]&&(g=[57,1,a.v],k.push(e));var d=(d+" ").substr(0,15),d=d+a.Ka[g[0]],m=null;if(void 0!==g[2]){l=g[2];m=a.ka[l];if(1==g[1]&&l==a.ea)m=m.replace(/nnnn/,p(qb(b,h=k.pop()),4));else for(;k.length;)m=m.replace(/nn/,p(h=k.pop(),2));l==a.v&&1==g[1]&&32<=h&&128>h&&(m+=" ;'"+String.fromCharCode(h)+"'")}if(e==a.s.bb&&
(h<a.V.length&&(m=a.V[h]),h==a.s.Mb)){l=0;for(m='"';h=a.S(b++);)16>l?m+=String.fromCharCode(h):16==l&&(m+="\u2026"),l++;m+='"'}m&&(d+=" "+m);c&&(d=(d+" ").substr(0,30),d+=";"+c.toString());a.$=b;return d}
function Y(a,b){var c=a.ua;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.O||c>=a.Ga)&&(a.l("address out of range: "+p(c)),c=void 0);return c}
function ub(a,b){if("?"==b)a.l("\nfrequency commands:"),a.l("clear\tclear all frequency counts");else{var c=0,d;if(a.B)if("clear"==b){for(d=0;d<a.B.length;d++)a.B[d]=[d,0];a.l("frequency data cleared");c++}else if(void 0!==b)a.l("unknown frequency command: "+b),c++;else{var e=a.B.slice();e.sort(function(a,b){return b[1]-a[1]});for(d=0;d<e.length;d++){var g=e[d][0],h=e[d][1];h&&(a.l(a.Ka[a.fa[g][0]]+" ("+q(g)+"): "+h+" times"),c++)}}c||a.l("no frequency data available")}}
function nb(a,b,c,d){var e=Y(a,b);if(void 0!==e){void 0===d&&(d=1);b=a.Ga;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.ua&&a.l();d--&&e<b;)c=tb(a,e,J(a,!1)||a.Da?a.L:0),a.l(c),a.ua=e=a.$}}
function ob(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(void 0!==b&&1<b.length){var c=!1,d=b[1],e=null,g=d.indexOf("=");if(0<g)e=d.substr(g+1),d=d.substr(0,g);else if(2<b.length)e=b[2];else{a.l("missing value for "+b[1]);return}g=parseInt(e,16);if(isNaN(g)){a.l("invalid value: "+e);return}switch(d.toUpperCase()){case "A":a.s.h=g&255;break;case "X":a.s.w=g&
255;break;case "Y":a.s.F=g&255;break;case "C":a.s.c=g?256:0;break;case "Z":a.s.j=g?0:1;break;case "D":g?Ja(a.s):Ka(a.s);break;case "V":g?(d=a.s,d.v=0,d.A=128):(d=a.s,d.v=0,d.A=0);break;case "N":a.s.i=g?128:0;break;case "S":if(256!=(g&-256)){a.l("invalid stack pointer: "+e);return}a.s.G=g;break;case "PC":c=!0;a.s.f=g&65535;a.ua=a.s.f;break;default:a.l("unknown register: "+d);return}a.s.update()}a.l("A="+p(a.s.h,2)+" X="+p(a.s.w,2)+" Y="+p(a.s.F,2)+" P="+p(Ea(a.s),2)+" S="+p(a.s.G,4)+" PC="+p(a.s.f,
4));c&&nb(a,p(a.ua=a.s.f,4))}}function vb(a,b){var c=void 0===b?1:parseInt(b,10),d=1==c?0:1;fa(c,function(a){return function(){return I(a,!0)&&a.step(d)}}(a),function(a){return function(){I(a,!1)}}(a))}
function lb(a,b){b.length||(a.Ya?(a.l("ended assemble @"+p(a.ga,4)),a.ua=a.ga,a.Ya=!1):a.nb&&(b=a.nb));if(K(a)&&!J(a,!0)&&0<b.length){a.Ya?b="a "+p(a.ga,4)+" "+b:1<b.length&&1!=b.indexOf(" ")&&(b=b.charAt(0).toLowerCase()+" "+b.substr(1));var c=b.split(" ");a.nb=c[0];switch(c[0].toLowerCase()){case "a":var d=Y(a,c[1]);if(void 0!==d)if(a.ga=d,void 0===c[2])a.l("begin assemble @"+r(a.ga)),a.Ya=!0,a.s.update();else{var e,g=c[2],h=c[3],c=a.ga,d=[];if(void 0!==g){var k,g=g.toUpperCase();"?"==g.charAt(g.length-
1)&&(h="?",g=g.substr(0,g.length-1));for(k=0;k<a.Ka.length&&g!=a.Ka[k];k++);k==a.Ka.length&&(a.l("unknown operation: "+g),k=-1);var l="",m;if(0<=k&&void 0!==h)if(l=h.toUpperCase(),"?"==l){for(h=m=0;h<a.fa.length;h++)a.fa[h][0]===k&&(m||a.l("supported opcodes:"),a.l(" "+p(h,2)+": "+g+(void 0!==a.fa[h][2]?" "+a.ka[a.fa[h][2]]:"")),m++);k=-1}else if(m=l.match(a.Oe),null!==m&&m[0]==l){for(h=1;h<m.length;h++)if(m[h]==l)if(void 0===e)e=h-1;else{a.l("too many operand matches (both "+a.ka[e]+" and "+
a.ka[h-1]+")");k=-1;break}e==a.Pa&&0>a.Pb.indexOf(k)&&(e=a.N);e==a.ob&&27!=k&&(e=a.N)}else a.l("unknown operand: "+l),k=-1;if(0<=k){m=-1;for(h=0;h<a.fa.length;h++)if(a.fa[h][0]===k&&a.fa[h][2]===e)if(0>m)m=h;else{a.l("too many instruction matches (both "+q(m)+" and "+q(h)+")");m=-2;break}if(0<=m){if(d.push(m),void 0!==e)if(g=a.fa[m][1],l=l.match(/[0-9A-F]+/),null!==l)for(l=parseInt(l[0],16),1==g&&e==a.ea&&(l-=c+2,-128>l||127<l)&&(a.l("branch out of range ("+l+")"),d=[],g=0),h=0;h<g;h++)d.push(l&255),
l>>>=8;else g&&a.l("instruction missing "+g+" bytes")}else a.l("unknown instruction: "+g+" "+l+"")}}e=d;if(e.length){for(c=0;c<e.length;c++)a.W(a.ga+c,e[c]);a.l(tb(a,a.ga));a.ga+=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.sa;for(c=0;c<d.length;c++)a.l("breakpoint enabled: "+r(d[c])+" (exec)"),e++;d=a.wa;for(c=0;c<d.length;c++)a.l("breakpoint enabled: "+r(d[c])+" (read)"),e++;d=a.ya;for(c=0;c<d.length;c++)a.l("breakpoint enabled: "+r(d[c])+" (write)"),e++;e||a.l("no breakpoints")}else void 0===c?a.l("missing breakpoint address"):"c"==e&&"*"==c?(a.sa=[],a.wa=[],a.ya=[],a.l("all breakpoints cleared")):(c=Y(a,c),void 0!==c&&("p"==e?rb(a,c)?a.l("breakpoint enabled: "+r(c)+" (exec)"):
a.l("breakpoint not set: "+r(c)):"c"==e?X(a.sa,c,!0)?a.l("breakpoint cleared: "+r(c)+" (exec)"):X(a.wa,c,!0)?a.l("breakpoint cleared: "+r(c)+" (read)"):X(a.ya,c,!0)?a.l("breakpoint cleared: "+r(c)+" (write)"):a.l("breakpoint missing: "+r(c)):"r"==e?(X(a.wa,c,void 0)||a.wa.push(c),a.l("breakpoint enabled: "+r(c)+" (read)")):"w"==e?(X(a.ya,c,void 0)||a.ya.push(c),a.l("breakpoint enabled: "+r(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=g="";h=e;for(k=0;8>k&&e<a.Ga;k++)m=a.S(e),void 0===m&&(m=0),g+=p(m,2)+" ",l+=32<=m&&128>m?String.fromCharCode(m):".",e++;a.l(p(h,4)+" "+g+l)}a.ua=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++)g=parseInt(c[d],16),a.W(e++,g);break;case "f":ub(a,c[1]);break;case "g":e=
c[1];void 0!==e&&sb(a,Y(a,e));a.va()||a.s.ca();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.Ma+"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":M(a.s,a.s.Ra);break;case "fast":M(a.s,a.s.Nb);break;case "max":M(a.s,a.s.eb);break;case "classic":kb(a,
!0);a.l("classic syntax enabled");break;case "modern":kb(a,!1);a.l("modern syntax enabled");break;case "msg":e=0;void 0!==c[2]&&("all"==c[2]?e=255:void 0!==a.Ua[c[2]]&&(e=a.Ua[c[2]]),e&&("on"==c[3]?a.la|=e:"off"==c[3]&&(a.la&=~e)));for(d in a.Ua)if(void 0===c[2]||"all"==c[2]||c[2]==d)e=a.Ua[d],a.l(d+" messages: "+(a.la&e?"on":"off"));break;default:a.l("unknown option: "+e)}break;case "p":l=c[1];e=10;c=a.La;d=a.xa;if(void 0!==d){g=void 0===l?a.Tb:parseInt(l,10);void 0===g&&(g=10);g>d.length&&(a.l("note: only "+
d.length+" available"),g=d.length);void 0!==l&&(a.mb=0,a.l(g+" instructions earlier:"));l=a.mb?a.mb:1;c-=g;for(0>c&&(c=d.length-1);e&&c!=a.La;){h=d[c];if(0>h)break;a.l(tb(a,h,l++));++c==d.length&&(c=0);e--;g--}a.Tb=g;a.mb=l}10==e&&a.l("no history available");break;case "r":ob(a,c);break;case "s":a.S(a.s.f)==a.s.Qa?(sb(a,a.s.f+3),a.Da=!0,a.va()||a.s.ca()):vb(a);break;case "t":vb(a,c[1]);break;case "u":nb(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)}}}x(function(){for(var a=G(document,"c1pjs","debugger"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new jb(d);F(d,c)}});function Z(a,b){A.call(this,"C1PComputer",a);this.Y=b}C(Z);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.va())};
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 L(a,b){return a.Y[b]?a.Y[b][0]:null}
function wb(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(!K(e)){K(e,function(a){return function(){wb(a)}}(a));return}"cpu"==c?b=e:e.ha&&e.ha(!0,a)}}a.X();a.l("C1Pjs v1.22.0\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>");b&&b.ha(!0,a)}
x(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,k=0,l=0,m=0;m<d.modules.length;m++){var n=d.modules[m];if(!m){if("cpu"!=n.type)break;k=n.start;l=n.end;h=Array(l+1-k);for(e=k;e<h.length;e++)h[e]=0}if(e=ra(n.refID,d.id)){var y=n.type;void 0===g[y]&&(g[y]=[]);g[y].push(e);e.ba&&void 0!==n.start&&e.ba(h,n.start,n.end,g.cpu[0])}else{u('no component for <module refid="'+n.refID+'">');return}}if(void 0===h){u('<module type="cpu"> definition must appear first in the <computer> specification');
break}if(e=ra("debugger",d.id))g["debugger"]=[e],e.ba&&e.ba(h,k,l,g.cpu[0]);k=new Z(d,g);if(l=ra("panel",d.id))if(g.panel=[l],l.gb){e=d.id;d=void 0;g=[];e&&(e=0<(d=e.indexOf("."))?e.substr(0,d+1):"");for(d=0;d<B.length;d++)m=B[d],e&&m.id.indexOf(e)||g.push(m);d=g;for(g=0;g<d.length;g++)e=d[g],e!=l&&(e.$a=l.$a,e.l=l.l,e.gb=l.gb)}F(k,c);wb(k)}});var xb=0;function yb(a,b,c,d,e,g){e("Loading "+a+"...");t(a,function(h,k,l){l?(k||(k="unable to load "+a+" ("+l+")"),g(k,null)):Ab(k,a,b,c,d,e,g)})}
function Ab(a,b,c,d,e,g,h){function k(a,g){if(g)h(g,null);else{if(c){D[c]&&b&&(D[c][b]=a);var k=b;k&&0>k.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(k=window.location.pathname+k);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+k+'"}';"object"==typeof resources&&(k=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(k?' url="'+k+'"':""))}e||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,
"$1c1pjs$2"));k=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(k=new window.ActiveXObject("Microsoft.XMLDOM"),k.async=!1,k.loadXML(a)):k=(new window.DOMParser).parseFromString(a,"text/xml")}catch(y){k=null,a=y.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,k)}}a?e?Bb(a,g,k):k(a,null):h("no data"+(b?" for file: "+b:""),null)}
function Bb(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");t(e,function(g,h,k){if(k||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+k+")");else{if(g=d[3])if(k=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=k[0],m,n=/( [a-z]+=)(['"])(.*?)\2/g;m=n.exec(g);)l=0>l.indexOf(m[1])?l.replace(">",m[0]+">"):l.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);k[0]!=l&&(h=h.replace(k[0],l))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],h);Bb(a,b,c)}})}else c(a,null)}
function Cb(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=da(a))}function e(a){d("Error: "+a);k&&(--xb||z(!0));k=!1}var g,h,k=!0;xb++;D[a]={};try{if(g=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var m=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css";n.styleSheet?n.styleSheet.cssText=l:n.appendChild(document.createTextNode(l));m.appendChild(n)}c||(c=
"/versions/c1pjs/1.22.0/components.xsl");l=function(h,k){k?yb(c,null,null,!1,d,function(h,l){if(l)if(D[a]&&c&&(D[a][c]=h),d("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var m=k.transformNode(l);m?(g.outerHTML=m,--xb||z(!0)):e("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(m=new XSLTProcessor,m.importStylesheet(l),(m=m.transformToFragment(k,document))?g.parentNode?(g.parentNode.replaceChild(m,g),--xb||z(!0)):e("invalid machine element: "+
a):e("transformToFragment failed")):e("unable to transform XML: unsupported browser");else e(h)}):e(h)};"<"!=b.charAt(0)?yb(b,a,void 0,!0,d,l):Ab(b,null,a,void 0,!1,d,l)}else e("missing machine element: "+a)}catch(y){e(y.message)}return k}window.embedC1P=function(a,b,c){z(!1);return Cb(a,b,c)};window.enableEvents=z;window.sendEvent=la;})();

View file

@ -0,0 +1,125 @@
(function(){var e;function p(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function aa(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 ba(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}var ca={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};
function da(a){return a.replace(/[&<>"']/g,function(a){return ca[a]})}var q=Date.now||function(){return+new Date};
function r(a,b){var c=0,d=null;if("object"==typeof resources&&(d=resources[a]))b&&b(a,d,c);else if("function"==typeof resources)resources(a,function(c,d){b&&b(a,c,d)});else{var f=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");f.onreadystatechange=function(){4===f.readyState&&(d=f.responseText,200==f.status||!f.status&&d.length&&"file:"==(window?window.location.protocol:"file:")||(c=f.status||-1),b&&b(a,d,c))};f.open("GET",a,!0);f.send()}}
function t(a){window&&window.alert(a)}function v(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)?!0:!1}return!1}var w={init:[],show:[],exit:[]},ea=!1,x=!0;function fa(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function y(a){w.init.push(a)}
function z(a){if(x)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){t("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function A(a){!x&&a?(x=!0,ea&&ga("init")):x=a}function ga(a){w[a]&&z(w[a])}fa("onload",function(){ea=!0;z(w.init)});fa("onpageshow",function(){z(w.show)});fa(v("Opera")||v("iOS")?"onunload":"onbeforeunload",function(){z(w.exit)});
function B(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Da=this.id.substr(0,b),this.Ca=this.id.substr(b+1)):this.Ca=this.id;this[a]=c;this.u={va:!1,pa:!1,Aa:!1,H:!1,qa:!1};this.xa=null;this.u.qa=!1;this.A={};C.push(this)}var ha=void 0;if(window){ha||(ha=window.location.search.substr(1));for(var ia,ja=/\+/g,ka=/([^&=]+)=?([^&]*)/g;ia=ka.exec(ha);)ia[1].replace(ja," "),ia[2].replace(ja," ")}
function la(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}function D(a){var b;b||(b=B);a.prototype=la(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var C=[],E={};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<C.length;c++)if(C[c].id===a)return C[c]}return null}
function G(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){t(c.message+" ("+a+")")}return b}function H(a,b){for(var c=I(b.parentNode,"c1pjs-control"),d=0;d<c.length;d++)for(var f=c[d].childNodes,g=0;g<f.length;g++){var k=f[g];if(1===k.nodeType){var h=k.getAttribute("class");if(h)for(var l=h.split(" "),m=0;m<l.length;m++)switch(h=l[m],h){case "c1pjs-binding":(h=G(k))&&h.binding&&a.J(h.type,h.binding,k,h.value),m=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}
B.prototype={constructor:B,parent:null,toString:function(){return this.name?this.name:this.id||this.type},J:function(a,b,c){switch(b){case "clear":return this.A[b]||(this.A[b]=c,c.onclick=function(a){return function(){a.A.print&&(a.A.print.value="")}}(this)),!0;case "print":return this.A[b]||(this.ya=this.A[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.wa=function(a,b,c){this.F(a,"notice",c)}),!0;default:return!1}},log:function(){},F:function(){},status:function(a){this.F(this.Ca+": "+a)},wa:function(a,b){b||t(a)},N:function(a){this.u.qa||(this.u.va=!1!==a,this.u.va&&(a=this.xa,this.xa=null,a&&a()))}};function ma(a,b){if(a.u.Aa)return a.u.pa&&(a.u.pa=!1),a.u.Aa=!1;if(a.u.qa)return a.F(a.toString()+" error"),!1;a.u.pa=b;return a.u.pa}function J(a,b){b&&(a.u.va?b():a.xa=b);return a.u.va}function na(a,b){a.u.qa=!0;a.wa(b)}
function K(a){B.call(this,"C1PPanel",a);this.u.H=!1}D(K);K.prototype.J=function(a,b,c,d){return this.I&&this.I.J(a,b,c,d)||this.f&&this.f.J(a,b,c,d)||this.b&&this.b.J(a,b,c,d)?!0:B.prototype.J.call(this,a,b,c,d)};K.prototype.$=function(a,b){a&&!this.u.H&&(this.u.H=!0,this.I=b,this.f=L(b,"cpu"),this.b=L(b,"keyboard"),oa())};function oa(){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 K(f));H(g,d);a&&g.N()}}y(oa);
function pa(a){B.call(this,"C1PCPU",a);qa(this);this.u.H=!1;this.u.Z=!1;this.sa=a.autoStart;this.ia=0;this.Ba=2;this.speed=this.ia;this.oa=30;this.na=5;this.ea=8;this.ta=["Slow","Fast","Max"];this.cb=["(1Mhz)","(up to "+this.ea+"Mhz)","(unlimited)"];this.O=[];this.K=[];this.ja=65536;this.ka=0;this.Y=65536;this.ca=0;this.v=[this.Jb,this.bd,this.Ud,this.l,this.l,this.dd,this.zb,this.l,this.gd,this.ad,this.yb,this.l,this.l,this.Yc,this.wb,this.l,this.Ib,this.cd,this.l,this.l,this.l,this.ed,this.Ab,this.l,
this.Mb,this.$c,this.l,this.l,this.l,this.Zc,this.xb,this.l,this.zc,this.sb,this.l,this.l,this.Fb,this.ub,this.nd,this.l,this.jd,this.rb,this.md,this.l,this.Eb,this.ob,this.kd,this.l,this.Gb,this.tb,this.l,this.l,this.l,this.vb,this.od,this.l,this.Ed,this.qb,this.l,this.l,this.l,this.pb,this.ld,this.l,this.ud,this.nc,this.l,this.l,this.l,this.pc,this.Vc,this.l,this.fd,this.mc,this.Uc,this.l,this.yc,this.jc,this.Sc,this.l,this.Kb,this.oc,this.l,this.l,this.l,this.qc,this.Wc,this.l,this.Ob,this.lc,
this.l,this.l,this.l,this.kc,this.Tc,this.l,this.vd,this.Na,this.l,this.l,this.l,this.Pa,this.sd,this.l,this.hd,this.Ma,this.rd,this.l,this.xc,this.Ja,this.pd,this.l,this.Lb,this.Oa,this.l,this.l,this.l,this.Qa,this.td,this.l,this.Gd,this.La,this.l,this.l,this.l,this.Ka,this.qd,this.l,this.l,this.Kd,this.l,this.l,this.Sd,this.Md,this.Pd,this.l,this.ic,this.l,this.Yd,this.l,this.Rd,this.Hd,this.Od,this.l,this.Bb,this.Ld,this.l,this.l,this.Td,this.Nd,this.Qd,this.l,this.$d,this.Jd,this.Zd,this.l,this.l,
this.Id,this.l,this.l,this.Pc,this.Ec,this.Kc,this.l,this.Qc,this.Gc,this.Lc,this.l,this.Wd,this.Dc,this.Vd,this.l,this.Nc,this.Ac,this.Ic,this.l,this.Cb,this.Fc,this.l,this.l,this.Rc,this.Hc,this.Mc,this.l,this.Pb,this.Cc,this.Xd,this.l,this.Oc,this.Bc,this.Jc,this.l,this.bc,this.Ub,this.l,this.l,this.cc,this.Wb,this.fc,this.l,this.wc,this.Tb,this.hc,this.l,this.ac,this.Qb,this.dc,this.l,this.Hb,this.Vb,this.l,this.l,this.l,this.Xb,this.gc,this.l,this.Nb,this.Sb,this.l,this.l,this.l,this.Rb,this.ec,
this.l,this.Zb,this.Va,this.l,this.l,this.$b,this.Xa,this.tc,this.l,this.vc,this.Ua,this.Xc,this.l,this.Yb,this.Ra,this.rc,this.l,this.Db,this.Wa,this.l,this.l,this.l,this.Ya,this.uc,this.l,this.Fd,this.Ta,this.l,this.l,this.l,this.Sa,this.sc,this.l];this.bb=[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]}D(pa);e=pa.prototype;e.reset=function(a){this.u.Z&&M(this);qa(this);this.c=this.a[65532]|this.a[65533]<<8;this.u.qa=!1;a&&(!0===this.sa||null===this.sa&&void 0===this.A.run)&&N(this)};
e.J=function(a,b,c){a=!1;switch(b){case "run":this.A[b]=c;c.onclick=function(a){return function(){a.u.Z?M(a):N(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.A[b]=c;a=!0;break;case "setSpeed":this.A[b]=c,c.onclick=function(a){return function(){ra(a,2<=a.speed?a.ia:a.speed+1,!0)}}(this),a=!0}return a};e.X=function(a,b){this.a=a;(this.Ha=b)?t("unsupported CPU address buffer offset ("+this.Ha+")"):this.N()};
e.$=function(a,b){if(a&&!this.u.H){this.I=b;var c=L(b,"video");c&&(this.za=function(a){return function(){sa(a)}}(c),this.da=function(a){return function(){a.da()}}(c));this.u.H=!0;this.reset(!0);this.update()}};function ta(a,b,c,d,f){0>ua(a.O,b,c,d,f)&&(a.ja>b&&(a.ja=b),a.ka<c&&(a.ka=c),a.O.push([b,c,d,f]))}function O(a,b,c,d,f){0>ua(a.K,b,c,d,f)&&(a.Y>b&&(a.Y=b),a.ca<c&&(a.ca=c),a.K.push([b,c,d,f]))}
function ua(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 ra(a,b,c){void 0!==b&&(a.speed=b,a.A.setSpeed&&(a.A.setSpeed.innerHTML=a.ta[2<=b?0:b+1]),a.F("running at "+a.ta[b].toLowerCase()+" speed "+a.cb[b]),c&&a.da());a.S=0;a.Ea=q();va(a)}e.za=function(){};e.da=function(){};function P(a,b,c,d){void 0!==a.A[b]&&(void 0===d&&(d=1),c="0000"+c.toString(16),a.A[b].innerHTML=c.slice(c.length-d).toUpperCase())}
function wa(a){P(a,"A",a.g,2);P(a,"X",a.m,2);P(a,"Y",a.s,2);var b=xa(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.o,4);P(a,"PC",a.c,4);a.A.speed&&a.ba&&(a.A.speed.innerHTML=a.ba.toFixed(1)+"Mhz")}
function va(a,b){var c=30;c<a.oa&&(c=a.oa);c<a.na&&(c=a.na);var d=1;b&&a.speed>a.ia&&a.ba&&(d=a.ba);d>a.ea&&2>a.speed&&(d=a.ea);a.eb=Math.round(1E3/30);a.fa=Math.floor(1E6/c*d);a.la=Math.floor(1E6/30*d);a.Ga=Math.floor(1E6/a.oa*d);a.Fa=Math.floor(1E6/a.na*d);b||(a.R=a.la,a.U=a.Ga,a.T=a.Fa);a.ma=0}function ya(a){1E6<=a.ma&&va(a,!0);a.V=0;a.fb=q()}
function za(a){var b=q(),c=a.eb;a.V&&(c=Math.round(c*a.V/a.la));c=c-(b-a.fb);if(b=b-a.Ea)a.ba=Math.round(a.S/(100*b))/10,864E5<=b&&ra(a);0>c?c=0:1==a.speed?a.ba<=a.ea&&(c=0):2==a.speed&&(c=0);a.ma+=a.V;return c}
function N(a){if(ma(a,!0)){a.u.Z||(ra(a),a.I&&a.I.start(),a.u.Z=!0,a.A.run&&(a.A.run.innerHTML="Halt"),a.da());ya(a);try{do{a.step(a.fa);var b=a.L-a.G;a.S+=b;a.V+=b;a.L=a.G=0;a.U-=a.fa;0>=a.U&&(a.U+=a.Ga,a.za());a.T-=a.fa;0>=a.T&&(a.T+=a.Fa,wa(a));a.R-=a.fa;if(0>=a.R){a.R+=a.la;break}}while(a.u.Z)}catch(c){M(a);a.update();ma(a,!1);na(a,c.stack||c.message);return}setTimeout(function(a){return function(){N(a)}}(a),za(a))}else a.update(),a.I&&a.I.stop(a.Ea,a.S)}
e.step=function(a){this.b=this.j=-1;this.L=this.G=a;do{a=this.a[this.c];this.c++;this.v[a].call(this);if(0<=this.b){if(this.b>=this.ja&&this.b<=this.ka)for(var b=this.b,c=this.c,d=0;d<this.O.length;d++)b>=this.O[d][0]&&b<=this.O[d][1]&&this.O[d][3].call(this.O[d][2],b,c);this.b=-1}else if(0<=this.j){if(this.j>=this.Y&&this.j<=this.ca)for(b=this.j,c=this.c,d=0;d<this.K.length;d++)b>=this.K[d][0]&&b<=this.K[d][1]&&this.K[d][3].call(this.K[d][2],b,c);this.j=-1}this.G-=this.bb[a]}while(0<this.G);return!0};
function M(a){a.u.pa&&(a.u.Aa=!0);a.L-=a.G;a.G=0;a.u.Z&&(a.u.Z=!1,a.A.run&&(a.A.run.innerHTML="Run"))}e.update=function(){this.za();wa(this)};function Aa(a){return a.u.Z?a.S+a.L-a.G:0}e.W=function(a){return this.a[a]};e.P=function(a,b){this.a[a]=b};function xa(a){var b=a.f&256?1:0,b=b|(a.i&255?0:2),b=b|((a.w&255^a.C^a.w>>1)&128?64:0),b=b|(a.h&128?128:0);return a.B&60|b}
function Q(a,b,c){var d=a.f&256?1:0,f=(b&15)+(c&15)+d;10<=f&&(f=f+6&15|16);f+=(b&240)+(c&240);a.C=b^c;a.w=f;a.h=f&255;160<=f&&(f+=96);512<=f&&(f-=256);a.f=f;a.i=b+c+d&255;a.G--;return f&255}function R(a,b,c){var d=a.f&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.f=b-c-d)&255;a.C=b^c;a.w=a.f;a.f^=256;a.G--;return f&255}function qa(a){a.g=0;a.m=0;a.s=0;a.o=256;a.B=0;a.h=0;a.i=0;a.C=0;a.w=0;a.f=0;a.c=0;a.b=-1;a.j=-1;a.ba=0;a.S=a.L=a.G=0}
e.Jb=function(){this.c++;this.a[this.o--]=this.c>>8;this.o|=256;this.a[this.o--]=this.c&255;this.o|=256;this.B|=16;this.B=xa(this);this.a[this.o--]=this.B;this.o|=256;this.B&=239;this.b=65534;this.c=this.a[this.b]|this.a[this.b+1]<<8};e.bd=function(){this.b=this.a[this.c++]+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.dd=function(){this.b=this.a[this.c++];this.h=this.i=this.g|=this.a[this.b]};
e.zb=function(){this.j=this.a[this.c++];this.f=this.a[this.j]<<1;this.h=this.i=this.a[this.j]=this.f&255};e.gd=function(){this.B=xa(this);this.a[this.o--]=this.B;this.o|=256};e.ad=function(){this.b=this.c++;this.h=this.i=this.g|=this.a[this.b]};e.yb=function(){this.f=this.g<<1;this.h=this.i=this.g=this.f&255};e.Yc=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.h=this.i=this.g|=this.a[this.b]};
e.wb=function(){this.j=this.a[this.c++]|this.a[this.c++]<<8;this.f=this.a[this.j]<<1;this.h=this.i=this.a[this.j]=this.f&255};e.Ib=function(){this.c+=(this.h&128?0:(this.G--,this.a[this.c]<<24>>24))+1};e.cd=function(){this.b=this.a[this.c++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.s;this.h=this.i=this.g|=this.a[this.b]};e.ed=function(){this.b=this.a[this.c++]+this.m&255;this.h=this.i=this.g|=this.a[this.b]};
e.Ab=function(){this.j=this.a[this.c++]+this.m&255;this.f=this.a[this.j]<<1;this.h=this.i=this.a[this.j]=this.f&255};e.Mb=function(){this.f=0};e.$c=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.s;this.h=this.i=this.g|=this.a[this.b]};e.Zc=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.h=this.i=this.g|=this.a[this.b]};e.xb=function(){this.j=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.f=this.a[this.j]<<1;this.h=this.i=this.a[this.j]=this.f&255};
e.zc=function(){this.b=this.c++;this.a[this.o--]=this.c>>8;this.o|=256;this.a[this.o--]=this.c&255;this.o|=256;this.c=this.a[this.b]|this.a[this.b+1]<<8};e.sb=function(){this.b=this.a[this.c++]+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.Fb=function(){this.b=this.a[this.c++];this.i=this.g&this.a[this.b];this.h=this.h&127|this.a[this.b]&128;this.w=0;this.C=this.a[this.b]&64?128:0};e.ub=function(){this.b=this.a[this.c++];this.h=this.i=this.g&=this.a[this.b]};
e.nd=function(){this.j=this.a[this.c++];this.f=this.f&65280|this.a[this.j];this.f<<=1;this.f=this.f&65534|(this.f&512?1:0);this.h=this.i=this.a[this.j]=this.f&255};e.jd=function(){this.o=this.o+1&255|256;this.B=this.a[this.o];this.f=this.B&1?256:0;this.i=this.B&2?0:1;this.h=this.B&128;this.w=0;this.C=this.B&64?128:0};e.rb=function(){this.b=this.c++;this.h=this.i=this.g&=this.a[this.b]};
e.md=function(){this.f=this.f&65280|this.g;this.f<<=1;this.f=this.f&65534|(this.f&512?1:0);this.h=this.i=this.g=this.f&255};e.Eb=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.i=this.g&this.a[this.b];this.h=this.h&127|this.a[this.b]&128;this.w=0;this.C=this.a[this.b]&64?128:0};e.ob=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.h=this.i=this.g&=this.a[this.b]};
e.kd=function(){this.j=this.a[this.c++]|this.a[this.c++]<<8;this.f=this.f&65280|this.a[this.j];this.f<<=1;this.f=this.f&65534|(this.f&512?1:0);this.h=this.i=this.a[this.j]=this.f&255};e.Gb=function(){this.c+=(this.h&128?(this.G--,this.a[this.c]<<24>>24):0)+1};e.tb=function(){this.b=this.a[this.c++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.s;this.h=this.i=this.g&=this.a[this.b]};e.vb=function(){this.b=this.a[this.c++]+this.m&255;this.h=this.i=this.g&=this.a[this.b]};
e.od=function(){this.j=this.a[this.c++]+this.m&255;this.f=this.f&65280|this.a[this.j];this.f<<=1;this.f=this.f&65534|(this.f&512?1:0);this.h=this.i=this.a[this.j]=this.f&255};e.Ed=function(){this.f=256};e.qb=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.s;this.h=this.i=this.g&=this.a[this.b]};e.pb=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.h=this.i=this.g&=this.a[this.b]};
e.ld=function(){this.j=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.f=this.f&65280|this.a[this.j];this.f<<=1;this.f=this.f&65534|(this.f&512?1:0);this.h=this.i=this.a[this.j]=this.f&255};e.ud=function(){this.o=this.o+1&255|256;this.B=this.a[this.o];this.f=this.B&1?256:0;this.i=this.B&2?0:1;this.h=this.B&128;this.w=0;this.C=this.B&64?128:0;this.o=this.o+2&255|256;this.c=this.a[this.o-1|256]|this.a[this.o]<<8};
e.nc=function(){this.b=this.a[this.c++]+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.pc=function(){this.b=this.a[this.c++];this.h=this.i=this.g^=this.a[this.b]};e.Vc=function(){this.j=this.a[this.c++];this.f=this.f&65279|(this.a[this.j]&1?256:0);this.a[this.j]=(this.f=this.f&65280|this.a[this.j]>>1)&255;this.h=this.i=this.f&255};e.fd=function(){this.a[this.o--]=this.g;this.o|=256};e.mc=function(){this.b=this.c++;this.h=this.i=this.g^=this.a[this.b]};
e.Uc=function(){this.f=this.f&65279|(this.g&1?256:0);this.g=(this.f=this.f&65280|this.g>>1)&255;this.h=this.i=this.f&255};e.yc=function(){this.b=this.c;this.c=this.a[this.b]|this.a[this.b+1]<<8};e.jc=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.h=this.i=this.g^=this.a[this.b]};e.Sc=function(){this.j=this.a[this.c++]|this.a[this.c++]<<8;this.f=this.f&65279|(this.a[this.j]&1?256:0);this.a[this.j]=(this.f=this.f&65280|this.a[this.j]>>1)&255;this.h=this.i=this.f&255};
e.Kb=function(){this.c+=((this.w&255^this.C^this.w>>1)&128?0:(this.G--,this.a[this.c]<<24>>24))+1};e.oc=function(){this.b=this.a[this.c++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.s;this.h=this.i=this.g^=this.a[this.b]};e.qc=function(){this.b=this.a[this.c++]+this.m&255;this.h=this.i=this.g^=this.a[this.b]};e.Wc=function(){this.j=this.a[this.c++]+this.m&255;this.f=this.f&65279|(this.a[this.j]&1?256:0);this.a[this.j]=(this.f=this.f&65280|this.a[this.j]>>1)&255;this.h=this.i=this.f&255};
e.Ob=function(){this.B&=251};e.lc=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.s;this.h=this.i=this.g^=this.a[this.b]};e.kc=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.h=this.i=this.g^=this.a[this.b]};e.Tc=function(){this.j=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.f=this.f&65279|(this.a[this.j]&1?256:0);this.a[this.j]=(this.f=this.f&65280|this.a[this.j]>>1)&255;this.h=this.i=this.f&255};
e.vd=function(){this.o=this.o+2&255|256;this.c=(this.a[this.o-1|256]|this.a[this.o]<<8)+1};e.Na=function(){this.b=this.a[this.c++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.f=this.g+this.a[this.b]+(this.f&256?1:0);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255};e.kb=function(){this.b=this.a[this.c++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.g=Q(this,this.g,this.a[this.b])};
e.Pa=function(){this.b=this.a[this.c++];this.f=this.g+this.a[this.b]+(this.f&256?1:0);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255};e.mb=function(){this.b=this.a[this.c++];this.g=Q(this,this.g,this.a[this.b])};e.sd=function(){this.j=this.a[this.c++];this.f=this.f&65280|this.a[this.j];this.f=this.f&65023|(this.f&1?512:0);this.f>>=1;this.h=this.i=this.a[this.j]=this.f&255};e.hd=function(){this.o=this.o+1&255|256;this.h=this.i=this.g=this.a[this.o]};
e.Ma=function(){this.b=this.c++;this.f=this.g+this.a[this.b]+(this.f&256?1:0);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255};e.jb=function(){this.b=this.c++;this.g=Q(this,this.g,this.a[this.b])};e.rd=function(){this.f=this.f&65280|this.g;this.f=this.f&65023|(this.f&1?512:0);this.f>>=1;this.h=this.i=this.g=this.f&255};e.xc=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.c=this.a[this.b]|this.a[this.b+1]<<8};
e.Ja=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.f=this.g+this.a[this.b]+(this.f&256?1:0);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255};e.gb=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.g=Q(this,this.g,this.a[this.b])};e.pd=function(){this.j=this.a[this.c++]|this.a[this.c++]<<8;this.f=this.f&65280|this.a[this.j];this.f=this.f&65023|(this.f&1?512:0);this.f>>=1;this.h=this.i=this.a[this.j]=this.f&255};
e.Lb=function(){this.c+=((this.w&255^this.C^this.w>>1)&128?(this.G--,this.a[this.c]<<24>>24):0)+1};e.Oa=function(){this.b=this.a[this.c++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.s;this.f=this.g+this.a[this.b]+(this.f&256?1:0);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255};e.lb=function(){this.b=this.a[this.c++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.s;this.g=Q(this,this.g,this.a[this.b])};
e.Qa=function(){this.b=this.a[this.c++]+this.m&255;this.f=this.g+this.a[this.b]+(this.f&256?1:0);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255};e.nb=function(){this.b=this.a[this.c++]+this.m&255;this.g=Q(this,this.g,this.a[this.b])};e.td=function(){this.j=this.a[this.c++]+this.m&255;this.f=this.f&65280|this.a[this.j];this.f=this.f&65023|(this.f&1?512:0);this.f>>=1;this.h=this.i=this.a[this.j]=this.f&255};e.Gd=function(){this.B|=4};
e.La=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.s;this.f=this.g+this.a[this.b]+(this.f&256?1:0);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255};e.ib=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.s;this.g=Q(this,this.g,this.a[this.b])};e.Ka=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.f=this.g+this.a[this.b]+(this.f&256?1:0);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255};
e.hb=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.g=Q(this,this.g,this.a[this.b])};e.qd=function(){this.j=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.f=this.f&65280|this.a[this.j];this.f=this.f&65023|(this.f&1?512:0);this.f>>=1;this.h=this.i=this.a[this.j]=this.f&255};e.Kd=function(){this.j=this.a[this.c++]+this.m&255;this.j=this.a[this.j]|this.a[this.j+1]<<8;this.a[this.j]=this.g};e.Sd=function(){this.j=this.a[this.c++];this.a[this.j]=this.s};
e.Md=function(){this.j=this.a[this.c++];this.a[this.j]=this.g};e.Pd=function(){this.j=this.a[this.c++];this.a[this.j]=this.m};e.ic=function(){this.h=this.i=this.s=this.s-1&255};e.Yd=function(){this.h=this.i=this.g=this.m};e.Rd=function(){this.j=this.a[this.c++]|this.a[this.c++]<<8;this.a[this.j]=this.s};e.Hd=function(){this.j=this.a[this.c++]|this.a[this.c++]<<8;this.a[this.j]=this.g};e.Od=function(){this.j=this.a[this.c++]|this.a[this.c++]<<8;this.a[this.j]=this.m};
e.Bb=function(){this.c+=(this.f&256?0:(this.G--,this.a[this.c]<<24>>24))+1};e.Ld=function(){this.j=this.a[this.c++];this.j=(this.a[this.j]|this.a[this.j+1]<<8)+this.s;this.a[this.j]=this.g};e.Td=function(){this.j=this.a[this.c++]+this.m&255;this.a[this.j]=this.s};e.Nd=function(){this.j=this.a[this.c++]+this.m&255;this.a[this.j]=this.g};e.Qd=function(){this.j=this.a[this.c++]+this.s&255;this.a[this.j]=this.m};e.$d=function(){this.h=this.i=this.g=this.s};
e.Jd=function(){this.j=(this.a[this.c++]|this.a[this.c++]<<8)+this.s;this.a[this.j]=this.g};e.Zd=function(){this.o=this.m|256};e.Id=function(){this.j=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.a[this.j]=this.g};e.Pc=function(){this.b=this.c++;this.h=this.i=this.s=this.a[this.b]};e.Ec=function(){this.b=this.a[this.c++]+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.Kc=function(){this.b=this.c++;this.h=this.i=this.m=this.a[this.b]};
e.Qc=function(){this.b=this.a[this.c++];this.h=this.i=this.s=this.a[this.b]};e.Gc=function(){this.b=this.a[this.c++];this.h=this.i=this.g=this.a[this.b]};e.Lc=function(){this.b=this.a[this.c++];this.h=this.i=this.m=this.a[this.b]};e.Wd=function(){this.h=this.i=this.s=this.g};e.Dc=function(){this.b=this.c++;this.h=this.i=this.g=this.a[this.b]};e.Vd=function(){this.h=this.i=this.m=this.g};e.Nc=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.h=this.i=this.s=this.a[this.b]};
e.Ac=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.h=this.i=this.g=this.a[this.b]};e.Ic=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.h=this.i=this.m=this.a[this.b]};e.Cb=function(){this.c+=(this.f&256?(this.G--,this.a[this.c]<<24>>24):0)+1};e.Fc=function(){this.b=this.a[this.c++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.s;this.h=this.i=this.g=this.a[this.b]};e.Rc=function(){this.b=this.a[this.c++]+this.m&255;this.h=this.i=this.s=this.a[this.b]};
e.Hc=function(){this.b=this.a[this.c++]+this.m&255;this.h=this.i=this.g=this.a[this.b]};e.Mc=function(){this.b=this.a[this.c++]+this.s&255;this.h=this.i=this.m=this.a[this.b]};e.Pb=function(){this.C=this.w=0};e.Cc=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.s;this.h=this.i=this.g=this.a[this.b]};e.Xd=function(){this.h=this.i=this.m=this.o&255};e.Oc=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.h=this.i=this.s=this.a[this.b]};
e.Bc=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.h=this.i=this.g=this.a[this.b]};e.Jc=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.s;this.h=this.i=this.m=this.a[this.b]};e.bc=function(){this.b=this.c++;this.h=this.i=this.f=this.s-this.a[this.b];this.f^=256};e.Ub=function(){this.b=this.a[this.c++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.h=this.i=this.f=this.g-this.a[this.b];this.f^=256};
e.cc=function(){this.b=this.a[this.c++];this.h=this.i=this.f=this.s-this.a[this.b];this.f^=256};e.Wb=function(){this.b=this.a[this.c++];this.h=this.i=this.f=this.g-this.a[this.b];this.f^=256};e.fc=function(){this.j=this.a[this.c++];this.h=this.i=this.a[this.j]=this.a[this.j]-1&255};e.wc=function(){this.h=this.i=this.s=this.s+1&255};e.Tb=function(){this.b=this.c++;this.h=this.i=this.f=this.g-this.a[this.b];this.f^=256};e.hc=function(){this.h=this.i=this.m=this.m-1&255};
e.ac=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.h=this.i=this.f=this.s-this.a[this.b];this.f^=256};e.Qb=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.h=this.i=this.f=this.g-this.a[this.b];this.f^=256};e.dc=function(){this.j=this.a[this.c++]|this.a[this.c++]<<8;this.h=this.i=this.a[this.j]=this.a[this.j]-1&255};e.Hb=function(){this.c+=(this.i&255?(this.G--,this.a[this.c]<<24>>24):0)+1};
e.Vb=function(){this.b=this.a[this.c++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.s;this.h=this.i=this.f=this.g-this.a[this.b];this.f^=256};e.Xb=function(){this.b=this.a[this.c++]+this.m&255;this.h=this.i=this.f=this.g-this.a[this.b];this.f^=256};e.gc=function(){this.j=this.a[this.c++]+this.m&255;this.h=this.i=this.a[this.j]=this.a[this.j]-1&255};
e.Nb=function(){this.B&=-9;this.v[97]=this.Na;this.v[101]=this.Pa;this.v[105]=this.Ma;this.v[109]=this.Ja;this.v[113]=this.Oa;this.v[117]=this.Qa;this.v[121]=this.La;this.v[125]=this.Ka;this.v[225]=this.Va;this.v[229]=this.Xa;this.v[233]=this.Ua;this.v[237]=this.Ra;this.v[241]=this.Wa;this.v[245]=this.Ya;this.v[249]=this.Ta;this.v[253]=this.Sa};e.Sb=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.s;this.h=this.i=this.f=this.g-this.a[this.b];this.f^=256};
e.Rb=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.h=this.i=this.f=this.g-this.a[this.b];this.f^=256};e.ec=function(){this.j=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.h=this.i=this.a[this.j]=this.a[this.j]-1&255};e.Zb=function(){this.b=this.c++;this.h=this.i=this.f=this.m-this.a[this.b];this.f^=256};
e.Va=function(){this.b=this.a[this.c++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.f=this.g-this.a[this.b]-(this.f&256?0:1);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255;this.f^=256};e.Ad=function(){this.b=this.a[this.c++]+this.m&255;this.b=this.a[this.b]|this.a[this.b+1]<<8;this.g=R(this,this.g,this.a[this.b])};e.$b=function(){this.b=this.a[this.c++];this.h=this.i=this.f=this.m-this.a[this.b];this.f^=256};
e.Xa=function(){this.b=this.a[this.c++];this.f=this.g-this.a[this.b]-(this.f&256?0:1);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255;this.f^=256};e.Cd=function(){this.b=this.a[this.c++];this.g=R(this,this.g,this.a[this.b])};e.tc=function(){this.j=this.a[this.c++];this.h=this.i=this.a[this.j]=this.a[this.j]+1&255};e.vc=function(){this.h=this.i=this.m=this.m+1&255};
e.Ua=function(){this.b=this.c++;this.f=this.g-this.a[this.b]-(this.f&256?0:1);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255;this.f^=256};e.zd=function(){this.b=this.c++;this.g=R(this,this.g,this.a[this.b])};e.Xc=function(){};e.Yb=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.h=this.i=this.f=this.m-this.a[this.b];this.f^=256};
e.Ra=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.f=this.g-this.a[this.b]-(this.f&256?0:1);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255;this.f^=256};e.wd=function(){this.b=this.a[this.c++]|this.a[this.c++]<<8;this.g=R(this,this.g,this.a[this.b])};e.rc=function(){this.j=this.a[this.c++]|this.a[this.c++]<<8;this.h=this.i=this.a[this.j]=this.a[this.j]+1&255};e.Db=function(){this.c+=(this.i&255?0:(this.G--,this.a[this.c]<<24>>24))+1};
e.Wa=function(){this.b=this.a[this.c++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.s;this.f=this.g-this.a[this.b]-(this.f&256?0:1);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255;this.f^=256};e.Bd=function(){this.b=this.a[this.c++];this.b=(this.a[this.b]|this.a[this.b+1]<<8)+this.s;this.g=R(this,this.g,this.a[this.b])};
e.Ya=function(){this.b=this.a[this.c++]+this.m&255;this.f=this.g-this.a[this.b]-(this.f&256?0:1);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255;this.f^=256};e.Dd=function(){this.b=this.a[this.c++]+this.m&255;this.g=R(this,this.g,this.a[this.b])};e.uc=function(){this.j=this.a[this.c++]+this.m&255;this.h=this.i=this.a[this.j]=this.a[this.j]+1&255};
e.Fd=function(){this.B|=8;this.v[97]=this.kb;this.v[101]=this.mb;this.v[105]=this.jb;this.v[109]=this.gb;this.v[113]=this.lb;this.v[117]=this.nb;this.v[121]=this.ib;this.v[125]=this.hb;this.v[225]=this.Ad;this.v[229]=this.Cd;this.v[233]=this.zd;this.v[237]=this.wd;this.v[241]=this.Bd;this.v[245]=this.Dd;this.v[249]=this.yd;this.v[253]=this.xd};
e.Ta=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.s;this.f=this.g-this.a[this.b]-(this.f&256?0:1);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255;this.f^=256};e.yd=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.s;this.g=R(this,this.g,this.a[this.b])};
e.Sa=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.f=this.g-this.a[this.b]-(this.f&256?0:1);this.C=this.g^this.a[this.b];this.w=this.f;this.h=this.i=this.g=this.f&255;this.f^=256};e.xd=function(){this.b=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.g=R(this,this.g,this.a[this.b])};e.sc=function(){this.j=(this.a[this.c++]|this.a[this.c++]<<8)+this.m;this.h=this.i=this.a[this.j]=this.a[this.j]+1&255};
e.Ud=function(){var a;a=this.a[this.c++];switch(a){case 0:this.F("HALT");M(this);break;case 1:a=this.c;for(var b="";a<this.a.length;){var c=this.a[a++];if(!c)break;b+=String.fromCharCode(c)}this.c=a;b=b.replace(/%A/g,p(this.g,2)).replace(/%X/g,p(this.m,2)).replace(/%Y/g,p(this.s,2));this.F(b);this.R=0;this.L-=this.G;this.G=0;break;default:this.c-=2,this.F("undefined opSim: 0x"+p(a,2)+" at "+("0x"+p(this.c,4))),M(this)}};
e.l=function(){var a=this.a[--this.c];this.F("undefined opcode: 0x"+p(a,2)+" at "+("0x"+p(this.c,4)));M(this)};y(function(){for(var a=I(document,"c1pjs","cpu"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new pa(d);H(d,c)}});
function S(a){B.call(this,"C1PROM",a);this.b=this.a=null;this.c=a.size;if(this.g=a.image){a=this.g;var b=ba(this.g);"json"!=b&&"hex"!=b&&(a="http://"+(window?window.location.host:"www.pcjs.org")+"/api/v1/dump?file="+this.g+"&format=bytes");var c=this;r(a,function(a,b,g){Ba(c,a,b,g)})}}D(S);
S.prototype.X=function(a,b,c,d){this.a=a;this.h=b;a=c-b+1;this.c||(this.c=a);a!=this.c?na(this,"computer-specified ROM size (0x"+p(a,4)+") does not match component-specified size ("+("0x"+p(this.c,4))+")"):(d&&(this.f=d,O(d,b,c,this,this.P)),Ca(this))};S.prototype.$=function(a){a&&!this.u.H&&(this.u.H=!0)};S.prototype.P=function(a,b){if(void 0!==b){var c=a-this.h;this.a[this.h+c]=this.b?this.b[c]:0}};
function Ba(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(k){a.F('Error processing ROM "'+b+'": '+k.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);Ca(a)}}
function Ca(a){if(!J(a))if(!a.g)a.N();else if(a.b&&a.a){var b=a.b.length;if(b!=a.c)na(a,"ROM image size (0x"+p(b,4)+") does not match component-specified size ("+("0x"+p(a.c,4))+")");else{for(var c=0;c<b;c++)a.a[a.h+c]=a.b[c];a.N()}}}y(function(){for(var a=I(document,"c1pjs","rom"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new S(d);H(d,c)}});function Da(a){B.call(this,"C1PRAM",a)}D(Da);Da.prototype.X=function(a){this.a=a;this.N()};
y(function(){for(var a=I(document,"c1pjs","ram"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new Da(d);H(d,c)}});
function Ea(a){B.call(this,"C1PKeyboard",a);this.u.H=!1;this.ea=a.model;this.L=8;this.na=10;this.ma=13;this.O=27;this.ka=this.L;this.la=this.na;this.fa=this.ma;this.K=this.O;this.v=241;this.G=224;this.ia=3;this.ja=15;this.o=1;this.m=[];this.m["break"]=this.G;this.m.esc=this.K;this.m["ctrl-c"]=this.ia;this.m["ctrl-o"]=this.ja;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.ka]=22E3;this.b[this.la]=21504;this.b[this.fa]=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.v]=1536;this.b[this.K]=1280;this.b[240]=512;this.b[242]=256;this.b[244]=0;this.reset()}D(Ea);
e=Ea.prototype;e.reset=function(){this.ra(this.ea);this.c=this.o;this.S=0;this.g=[this.o,0,0,0,0,0,0,0];this.w=[];if(this.h)for(var a in this.h)isNaN(+a)||this.h[a]&&clearTimeout(this.h[a]);this.h=[];this.ca=this.i=0;this.T=-1;this.R=this.g;this.V=this.C=0;this.j=""};
e.J=function(a,b,c){if(void 0===this.A[b])switch(b){case "keyDown":return this.A[b]=c,c.onkeydown=function(a){return function(b){return Fa(a,b,!0)}}(this),!0;case "keyPress":return this.A[b]=c,c.onkeypress=function(a){return function(b){var c=!0;b=b||window.event;b=b.which||b.keyCode;a.j="";a.c&8?a.c&=-9:c=!T(a,b);return c}}(this),!0;case "keyUp":return this.A[b]=c,c.onkeyup=function(a){return function(b){return Fa(a,b,!1)}}(this),!0;case "break":return this.A[b]=c,c.onclick=function(a){return function(){a.I&&
a.I.reset(!0)}}(this),!0;default:if(void 0!==this.m[b])return this.A[b]=c,c.onclick=function(a,b,c){return function(){a.f&&a.f.da();return!T(a,c)}}(this,b,this.m[b]),!0}return!1};e.X=function(a,b,c,d){this.a=a;this.Y=b;this.oa=c-b+1;this.sa=this.Y+this.oa;d&&(this.f=d,O(d,b,c,this,this.P));this.N()};e.ra=function(a){this.s=a;this.B=255;600!=this.s&&(this.B=0,this.F("updated keyboard model: "+this.s))};e.$=function(a,b){a&&!this.u.H&&(this.u.H=!0,this.I=b)};
e.N=function(){this.U=(this.ta=v("iOS"))||v("Android");B.prototype.N.call(this)};function Ga(a,b){var c=b?100:250;a.f&&a.f.ba&&(c/=a.f.ba);return c}function Ha(a,b){!a.i||void 0!==b&&b==a.i||(clearTimeout(a.h[a.i]),U(a,a.i,!1,4))}function V(a,b,c){a.j=b;Ia(a,c||300)}function Ia(a,b){if(0<a.j.length){var c=a.j.charCodeAt(0);10==c&&(c=13);65<=c&&90>=c&&(c+=32);a.j=a.j.substr(1);T(a,c)}0<a.j.length&&setTimeout(function(a){return function(){Ia(a,b)}}(a),b)}
function Fa(a,b,c){var d,f=!c;b=b.keyCode;c&&(a.ca=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.v-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.O||b==a.L?c?!T(a,b):!1:!0;f&&(a.c&=-9,a.U||b!=a.ca||Ha(a));void 0===d&&(d=!U(a,b,c,2));return d}
function T(a,b){var c=!1;b==a.G?a.I&&(a.I.reset(!0),c=!0):(a.U&&65<=b&&90>=b&&(b+=32),Ha(a,b),U(a,b,!0,0)&&(a.f.speed==a.f.Ba?U(a,b,!1,1):(c=!1,a.h[b]&&(clearTimeout(a.h[b]),c=!0),c=Ga(a,c),a.h[a.i=b]=setTimeout(function(a){return function(){U(a,b,!1,3)}}(a),c)),c=!0));return c}
function U(a,b,c,d){var f=!1;c||(a.h[b]=null,a.i==b&&(a.i=0));var g=0,k=a.b[b];void 0===k&&(1<=b&&26>=b&&(b+=64,g=a.v),k=a.b[b]);void 0!==k&&(b=k>>12,f=k>>8&15,g||(g=k&255),c?(a.g[b]|=1<<f,a.g[0]=g==a.v?a.g[0]|64:240==g?a.g[0]|4:242==g?a.g[0]|2:a.g[0]&-71):(a.g[b]&=~(1<<f),a.g[0]&=-71,a.g[0]|=a.c&70),c=0==d&&!a.w.length,a.w.push(a.g.slice()),Ja(a,c),f=!0);return f}e.W=function(){};e.P=function(a){this.S=this.f.W(a)^this.B;this.C++;Ja(this,!1,a)};
function Ja(a,b,c){var d=Aa(a.f);b||(a.f.speed==a.f.Ba?b=void 0!==c&&32<=a.C:(b=d-a.V,b=0>b||8192<=b));b&&(b=a.w.shift(),void 0!==b&&(a.R=b),a.C=0,a.V=d);for(b=d=0;8>b;b++)a.S&1<<b&&(d|=a.R[b]);d^=a.B;if(void 0!==c)a.a[c]=d;else if(c=a.Y,d!=a.T)for(;c<a.sa;c++)a.a[c]=d;a.T=d}y(function(){for(var a=I(document,"c1pjs","keyboard"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new Ea(d);H(d,c)}});
function Ka(a,b,c,d){B.call(this,"C1PVideo",a);this.S=a.model;this.K=a.charCols;this.L=a.charRows;this.U=a.screenWidth;this.V=a.screenHeight;this.i=a.charWidth;this.j=a.charHeight;La(this);this.m=b;this.R=c;this.g=d}D(Ka);e=Ka.prototype;e.reset=function(a){this.ra(this.S);if(this.a)for(var b=this.v;b<this.B;b++)this.a[b]=a?Math.floor(256*Math.random()):32};e.J=function(a,b,c){switch(b){case "refresh":return this.A[b]=c,c.onclick=function(a){return function(){Ma(a);sa(a)}}(this),!0}return!1};
e.X=function(a,b,c,d){this.a=a;this.v=b;this.T=c-b+1;this.B=this.v+this.T;d&&(this.f=d,ta(d,56832,56832,this,this.W),O(d,56832,56832,this,this.P));this.reset(!0)};function La(a,b,c,d,f){a.o=void 0!==b?b:a.K;a.Y=void 0!==c?c:a.L;a.c=a.o*a.Y;a.B=a.v+a.c;a.I=void 0!==d?d:0;a.O=void 0!==f?f:c;a.C=Math.floor(a.U/a.o);a.G=Math.floor(a.V/a.O)}e.da=function(){this.m.focus()};
e.ra=function(a){this.s=a;600==this.s?(La(this,this.K,this.L,3,25),1024==this.c&&this.f&&(this.h=this.B+this.c-1,O(this.f,this.h,this.h,this,this.$a))):(this.F("updated video model: "+this.s),La(this,64,32));Ma(this);sa(this)};e.$=function(a,b){if(a&&!this.u.H&&J(this)){if(this.u.H=!0,this.b=L(b,"keyboard"))this.b.J("canvas","keyDown",this.m),this.b.J("canvas","keyPress",this.m),this.b.J("canvas","keyUp",this.m)}else!a&&this.u.H&&(this.u.H=!1)};
e.N=function(){this.i||(this.i=Math.floor(this.g.width/16));this.j||(this.j=Math.floor(this.g.height/16));B.prototype.N.call(this)};e.W=function(a){var b=this.f.W(a);this.f.P(a,b&127|(Math.floor(Aa(this.f)/8333)&1?128:0))};e.P=function(){};
e.$a=function(a,b){if(void 0!==b){this.ra(540);this.b&&this.b.ra(542);var c=this.f,d=c.K,f=[],g=ua(d,this.h,this.h,this,this.$a);if(0<=g){f.push(d[g][0]);f.push(d[g][1]);d.splice(g,1);for(var k=65536,h=0,g=0;g<d.length;g++)k>d[g][0]&&(k=d[g][0]),h<d[g][1]&&(h=d[g][1]);f.push(k);f.push(h)}4==f.length&&(c.Y=f[2],c.ca=f[3])}};function Ma(a){a.w=Array(a.c);for(var b=0;b<=a.c;b++)a.w[b]=-1}
function sa(a){var b=0;if(a.u.H)for(;b<a.c;){var c=a.a[a.v+b];if(a.w[b]!=c){var d=Math.floor(b/a.o);if(d>=a.I&&(d-=a.I,d<a.O)){var f=c*a.i;a.R.drawImage(a.g,f%a.g.width,Math.floor(f/a.g.width)*a.j,a.i,a.j,b%a.o*a.C,d*a.G,a.C,a.G)}a.w[b]=c}b++}}
y(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(void 0===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,k=f.getContext("2d"),f=new Ka(d,f,k,g);g.onload=function(a){return function(){a.N()}}(f,d.charSet);g.src=d.charSet;H(f,c)}});
function Na(a){B.call(this,"C1PSerialPort",a);this.u.H=!1;this.s=a.demo;this.reset()}D(Na);e=Na.prototype;e.reset=function(){if(2!=this.c){this.h=this.j=0;var a=1;if(this.Da){var b=this.Da.match(/\d+/);null!==b&&(a=parseInt(b[0],10))}this.g='10 PRINT "HELLO OSI #'+a+'"\n';this.c=this.i=0}};e.start=function(){this.b&&this.s&&(V(this.b," C\n\n",3E3),setTimeout(function(a){return function(){a.c=1;V(a.b,"LOAD\n")}}(this),12E3));this.s=!1};
e.J=function(a,b,c){var d=this;switch(b){case "listSerial":return this.A[b]=c,!0;case "loadSerial":return this.A[b]=c,c.onclick=function(){d.A.listSerial&&r(d.A.listSerial.value,function(a,b,c){Oa(d,a,b,c)})},!0;case "mountSerial":return!v("Mobi")&&window&&"FileReader"in window?(this.A[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(){Oa(d,
b.name,c.result.toString(),0)};c.readAsText(b);return!1}):c.parentNode.removeChild(c),!0}return!1};e.X=function(a,b,c,d){this.a=a;this.m=b;this.v=c-b+1;this.o=this.m+this.v;if(this.f=d)ta(d,b,c,this,this.W),O(d,b,c,this,this.P);this.N()};e.$=function(a,b){a&&!this.u.H&&(this.u.H=!0,this.I=b,this.b=L(b,"keyboard"))};
function Oa(a,b,c,d){c?(a.g=c,a.i=0,a.c=0,a.I&&a.b&&a.f.u.Z?(a.F("auto-loading "+b),a.f.da(),"."!=a.g.charAt(0)?(a.c=1,V(a.b,"NEW\nLOAD\n")):(a.c=2,a.I.reset(!0),V(a.b,"ML"))):a.F(b+" ready to load")):a.F(b+" load error ("+d+")")}e.W=function(a,b){void 0!==b&&(a&1?Pa(this):this.g&&!this.i&&Pa(this))};e.P=function(){};
function Pa(a){if(void 0!==a.g){a.j=0;a.h=0;if(a.i<a.g.length){var b=a.g.charCodeAt(a.i++);10==b&&(b=13);a.j=b;a.h=1}else 1==a.c&&a.b&&V(a.b," \nRUN\n"),a.c=0;for(b=a.m+0;b<a.o;b+=2)a.a[b]=a.h?1:0;for(b=a.m+1;b<a.o;b+=2)a.a[b]=a.h?a.j:0}}y(function(){for(var a=I(document,"c1pjs","serial"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new Na(d);H(d,c)}});function Qa(a){B.call(this,"C1PDiskController",a);this.u.H=!1;this.reset(!0)}D(Qa);e=Qa.prototype;
e.reset=function(a){Ra(this);this.b=-1;a&&(this.c=[],this.c[0]={ae:0,Ia:40,ab:!0,ha:20,aa:0,ga:-1,ua:[]})};
function Ra(a){a.v={D:64,read:function(){},update:function(a){return function(c){void 0!==c&&(this.D=c);a.j.D&4||W(a,0,this)}}(a)};a.g={D:255,read:function(){this.update()},update:function(a){return function(c){void 0===c?c=a.g.D:Sa(a,c,a.i.D);c=(c|190)&-2;if(0<=a.b&&a.c[a.b].ua.length){var d=a.c[a.b];d.ab&&(c&=-33);d.aa||(c&=-3);10>=--d.ha&&(0<d.ha?(c&=-129,Ta(a)):(d.ha=100,0<=a.b&&(a.c[a.b].ga=0,Ua(a))))}this.D=c;a.j.D&4&&W(a,0,this)}}(a)};a.j={D:0,read:function(){},update:function(a){return function(c){void 0!==
c&&(this.D=c&-193);W(a,1,this);a.g.update();a.v.update()}}(a)};a.w={D:255,read:function(){},update:function(a){return function(c){void 0!==c&&(this.D=c);a.m.D&4||W(a,2,this)}}(a)};a.i={D:255,read:function(){},update:function(a){return function(c){void 0===c?c=a.i.D:Sa(a,a.g.D,c);if(0<=a.b&&a.b<a.c.length){var d=a.c[a.b];d.ua.length&&a.i.D&8&&!(c&8)&&(c&4?d.aa--:d.aa++,d.aa>=d.Ia&&(d.aa=d.Ia),0>d.aa&&(d.aa=0),d.ha=20,a.g.update(a.g.D|128),Ta(a))}this.D=c;a.m.D&4&&W(a,2,this)}}(a)};a.m={D:0,read:function(){},
update:function(a){return function(c){void 0!==c&&(this.D=c&-193);W(a,3,this);a.i.update();a.w.update()}}(a)};a.B={D:0,read:function(){},update:function(a){return function(c){void 0!==c&&(3==(c&3)&&(a.h.D=14),this.D=c);a.h.update()}}(a)};a.h={D:14,read:function(){},update:function(a){return function(c){void 0===c&&(c=a.h.D);c&=-2;0<=a.b&&0<=a.c[a.b].ga&&(c|=1);this.D=c;W(a,16,this)}}(a)};a.o={D:0,read:function(a){return function(){Ua(a)}}(a),update:function(a){return function(c){void 0!==c&&(this.D=
c);W(a,17,this)}}(a)};a.C={D:0,read:function(){},update:function(){return function(){}}(a)}}e.J=function(a,b,c){switch(b){case "listDisk":return this.A[b]=c,!0;case "loadDisk":return this.A[b]=c,c.onclick=function(a){return function(){if(a.A.listDisk){var b=a.A.listDisk.value,c=b;".json"!=b.substr(b.length-5)&&(c="http://"+window.location.host+"/api/v1/dump?disk="+b);a.F("loading "+aa(b)+"...");r(c,function(b,c,f){Va(a,b,c,f)})}}}(this),!0}return!1};
e.X=function(a,b,c,d){this.a=a;this.s=b;if(this.f=d)ta(d,b,c,this,this.W),O(d,b,c,this,this.P);this.N()};e.$=function(a){a&&!this.u.H&&(this.u.H=!0)};
function Va(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,k=f[c],h=k.sectors;if(void 0===(g=k.trackNum)||void 0===h)throw Error("track "+c+" missing data");g!=c&&t("track "+g+" out of order (expected "+c+")");d=[];var l,m,n;if(g){Wa(d,k,"trackSig");Xa(d,k);X(d,k,"trackType");for(var u=0;u<h.length;u++){l=h[u];
m=l.sectorData;X(d,l,"sectorSig");X(d,l,"sectorNum");X(d,l,"sectorPages");for(n=0;n<m.length;n++)d.push(m[n]);Wa(d,l,"sectorEndSig")}}else for(l=h[0],m=l.sectorData,X(d,k,"trackLoad",2),X(d,l,"sectorPages"),n=0;n<m.length;n++)d.push(m[n]);f[g].Za=d}a.c[0].ua=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(cb){a.F("disk data error: "+cb.message)}}}
function Xa(a,b){var c=b.trackNum;if(void 0===c)throw Error("missing bcd value: trackNum");a.push(Math.floor(c/10)<<4|c%10)}function X(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 Wa(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 Ya(a,b,c){b&=63;16>b?b&=3:32>b&&(b&=17);switch(b){case 0:a=a.j.D&4?a.g:a.v;break;case 1:a=a.j;break;case 2:a=a.m.D&4?a.i:a.w;break;case 3:a=a.m;break;case 16:a=c?a.B:a.h;break;case 17:a=a.o;break;default:a=a.C}return a}e.W=function(a,b){void 0!==b&&Ya(this,a-this.s,!1).read()};e.P=function(a,b){if(void 0!==b){var c=this.f.W(a);Ya(this,a-this.s,!0).update(c)}};function Sa(a,b,c){var d=-1;void 0!==b&&void 0!==c&&(d=0,c&32||(d|=2),a.g.D&64||(d|=1));a.b!=d&&(a.b=d,a.h.update())}
function Ta(a){0<=a.b&&(a.c[a.b].ga=-1,a.o.update(255),a.h.update())}function Ua(a){var b=null;if(0<=a.b){var b=a.c[a.b],c=b.ua[b.aa];void 0!==c&&(0<=b.ga&&b.ga<c.Za.length?(b.ha=100,b=c.Za[b.ga++],a.o.update(b),a.h.update()):(b.ha=10,Ta(a)))}}function W(a,b,c){a.f.P(b+a.s,c.D)}y(function(){for(var a=I(document,"c1pjs","disk"),b=0;b<a.length;b++){var c=a[b],d=G(c),d=new Qa(d);H(d,c)}});function Y(a,b){B.call(this,"C1PComputer",a);this.M=b}D(Y);
Y.prototype.reset=function(a){var b=null,c;for(c in this.M)for(var d=0;d<this.M[c].length;d++){var f=this.M[c][d];f&&f.reset&&(f.reset(),"cpu"==c&&(b=f))}b&&(b.update(),a&&N(b))};Y.prototype.start=function(){for(var a in this.M)if("cpu"!=a)for(var b=0;b<this.M[a].length;b++){var c=this.M[a][b];c&&c.start&&c.start()}};Y.prototype.stop=function(a,b){for(var c in this.M)if("cpu"!=c)for(var d=0;d<this.M[c].length;d++){var f=this.M[c][d];f&&f.stop&&f.stop(a,b)}};
Y.prototype.J=function(a,b,c){switch(b){case "reset":return this.A[b]=c,c.onclick=function(a){return function(){a.reset()}}(this),!0}return!1};function L(a,b){return a.M[b]?a.M[b][0]:null}function Za(a){var b=null,c;for(c in a.M)for(var d=0;d<a.M[c].length;d++){var f=a.M[c][d];if(f){if(!J(f)){J(f,function(a){return function(){Za(a)}}(a));return}"cpu"==c?b=f:f.$&&f.$(!0,a)}}a.N();a.F("C1Pjs v1.22.0\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>");b&&b.$(!0,a)}
y(function(){for(var a=I(document,"c1pjs","computer"),b=0;b<a.length;b++){for(var c=a[b],d=G(c),f,g={},k,h=0,l=0,m=0;m<d.modules.length;m++){var n=d.modules[m];if(!m){if("cpu"!=n.type)break;h=n.start;l=n.end;k=Array(l+1-h);for(f=h;f<k.length;f++)k[f]=0}if(f=F(n.refID,d.id)){var u=n.type;void 0===g[u]&&(g[u]=[]);g[u].push(f);f.X&&void 0!==n.start&&f.X(k,n.start,n.end,g.cpu[0])}else{t('no component for <module refid="'+n.refID+'">');return}}if(void 0===k){t('<module type="cpu"> definition must appear first in the <computer> specification');
break}if(f=F("debugger",d.id))g["debugger"]=[f],f.X&&f.X(k,h,l,g.cpu[0]);h=new Y(d,g);if(l=F("panel",d.id))if(g.panel=[l],l.ya){f=d.id;d=void 0;g=[];f&&(f=0<(d=f.indexOf("."))?f.substr(0,d+1):"");for(d=0;d<C.length;d++)m=C[d],f&&m.id.indexOf(f)||g.push(m);d=g;for(g=0;g<d.length;g++)f=d[g],f!=l&&(f.wa=l.wa,f.F=l.F,f.ya=l.ya)}H(h,c);Za(h)}});var Z=0;function $a(a,b,c,d,f,g){f("Loading "+a+"...");r(a,function(k,h,l){l?(h||(h="unable to load "+a+" ("+l+")"),g(h,null)):ab(h,a,b,c,d,f,g)})}
function ab(a,b,c,d,f,g,k){function h(a,g){if(g)k(g,null);else{if(c){E[c]&&b&&(E[c][b]=a);var h=b;h&&0>h.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+h+'"}';"object"==typeof resources&&(h=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}f||(a=a.replace(/(<xsl:variable name="APPCLASS">).*?(<\/xsl:variable>)/,
"$1c1pjs$2"));h=null;if("<"==a.charAt(0))try{f||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in window?(h=new window.ActiveXObject("Microsoft.XMLDOM"),h.async=!1,h.loadXML(a)):h=(new window.DOMParser).parseFromString(a,"text/xml")}catch(u){h=null,a=u.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);k(a,h)}}a?f?bb(a,g,h):h(a,null):k("no data"+(b?" for file: "+b:""),null)}
function bb(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var f=d[2];b("Loading "+f+"...");r(f,function(g,k,h){if(h||!k)c(a,"unable to resolve XML reference: "+d[0]+" ("+h+")");else{if(g=d[3])if(h=k.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var l=h[0],m,n=/( [a-z]+=)(['"])(.*?)\2/g;m=n.exec(g);)l=0>l.indexOf(m[1])?l.replace(">",m[0]+">"):l.replace(new RegExp(m[1]+"(['\"])(.*?)\\1"),m[0]);h[0]!=l&&(k=k.replace(h[0],l))}else{c(a,"missing <"+d[1]+"> in "+f);return}k=k.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],k);bb(a,b,c)}})}else c(a,null)}
function db(a,b,c){function d(a){if(void 0===k){var b=g&&I(g,"machine-warning");k=b&&b[0]||g}k&&(k.innerHTML=da(a))}function f(a){d("Error: "+a);h&&(--Z||A(!0));h=!1}var g,k,h=!0;Z++;E[a]={};try{if(g=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var m=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css";n.styleSheet?n.styleSheet.cssText=l:n.appendChild(document.createTextNode(l));m.appendChild(n)}c||(c="/versions/c1pjs/1.22.0/components.xsl");
l=function(h,k){k?$a(c,null,null,!1,d,function(h,l){if(l)if(E[a]&&c&&(E[a][c]=h),d("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var m=k.transformNode(l);m?(g.outerHTML=m,--Z||A(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(m=new XSLTProcessor,m.importStylesheet(l),(m=m.transformToFragment(k,document))?g.parentNode?(g.parentNode.replaceChild(m,g),--Z||A(!0)):f("invalid machine element: "+a):f("transformToFragment failed")):
f("unable to transform XML: unsupported browser");else f(h)}):f(h)};"<"!=b.charAt(0)?$a(b,a,void 0,!0,d,l):ab(b,null,a,void 0,!1,d,l)}else f("missing machine element: "+a)}catch(u){f(u.message)}return h}window.embedC1P=function(a,b,c){A(!1);return db(a,b,c)};window.enableEvents=A;window.sendEvent=ga;})();

View file

@ -0,0 +1,262 @@
@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 {
margin: 15px;
overflow: hidden;
}
.c1pjs {
overflow: visible;
}
.machine-placeholder {
text-align: center;
font-weight: bold;
}
.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-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,59 @@
<?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.22.0/common.css"/>
</xsl:template>
<xsl:template name="commonTop">
<div class="common-top">
<div class="common-top-left">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/apps/pc/">Apps</a></li>
<li><a href="/disks/pc/">Disks</a></li>
<li><a href="/devices/pc/machine/">Machines</a></li>
<li><a href="/docs/">Docs</a></li>
<li><a href="/pubs/">Pubs</a></li>
<li><a href="/blog/">Blog</a></li>
<li><a href="/docs/about/">About</a></li>
</ul>
</div>
<div class="common-top-right">
<p>Powered by JavaScript 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> website © 2012-2016 by <a href="http://twitter.com/jeffpar">@jeffpar</a></span><br/>
<span class="common-copyright">PCjs and C1Pjs released under <a href="http://gnu.org/licenses/gpl.html">GPL version 3 or later</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,575 @@
<?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="MACHINECLASS">c1p</xsl:variable>
<xsl:variable name="APPCLASS">c1pjs</xsl:variable>
<xsl:variable name="APPVERSION">1.22.0</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-2016 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: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:otherwise>224</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: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: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:otherwise/>
</xsl:choose>
</xsl:variable>
<xsl:variable name="screenColor">
<xsl:choose>
<xsl:when test="@screencolor"><xsl:value-of select="@screencolor"/></xsl:when>
<xsl:otherwise>black</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"/>'</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.22.0/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,49 @@
<?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.22.0/common.xsl"/>
<xsl:include href="/versions/c1pjs/1.22.0/components.xsl"/>
<xsl:template match="/machine">
<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 {@class}js">
<xsl:call-template name="component">
<xsl:with-param name="machine" select="@id"/>
<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: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="@class"/>-dbg</xsl:when>
<xsl:otherwise><xsl:value-of select="@class"/></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.22.0/common.xsl"/>
<xsl:include href="/versions/c1pjs/1.22.0/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="$MACHINECLASS"/></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.22.0/common.xsl"/>
<xsl:include href="/versions/c1pjs/1.22.0/document.xsl"/>
<xsl:include href="/versions/c1pjs/1.22.0/components.xsl"/>
<xsl:template match="/outline">
<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="$MACHINECLASS"/></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="$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:stylesheet>

View file

@ -0,0 +1,262 @@
@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 {
margin: 15px;
overflow: hidden;
}
.c1pjs {
overflow: visible;
}
.machine-placeholder {
text-align: center;
font-weight: bold;
}
.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-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,59 @@
<?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/pc8080/1.22.0/common.css"/>
</xsl:template>
<xsl:template name="commonTop">
<div class="common-top">
<div class="common-top-left">
<ul>
<li><a href="/">Home</a></li>
<li><a href="/apps/pc/">Apps</a></li>
<li><a href="/disks/pc/">Disks</a></li>
<li><a href="/devices/pc/machine/">Machines</a></li>
<li><a href="/docs/">Docs</a></li>
<li><a href="/pubs/">Pubs</a></li>
<li><a href="/blog/">Blog</a></li>
<li><a href="/docs/about/">About</a></li>
</ul>
</div>
<div class="common-top-right">
<p>Powered by JavaScript 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> website © 2012-2016 by <a href="http://twitter.com/jeffpar">@jeffpar</a></span><br/>
<span class="common-copyright">PCjs and C1Pjs released under <a href="http://gnu.org/licenses/gpl.html">GPL version 3 or later</a></span>
</p>
</div>
</xsl:template>
</xsl:stylesheet>

View file

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

File diff suppressed because it is too large Load diff

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/pc8080/1.22.0/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,49 @@
<?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/pc8080/1.22.0/common.xsl"/>
<xsl:include href="/versions/pc8080/1.22.0/components.xsl"/>
<xsl:template match="/machine">
<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 {@class}js">
<xsl:call-template name="component">
<xsl:with-param name="machine" select="@id"/>
<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: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="@class"/>-dbg</xsl:when>
<xsl:otherwise><xsl:value-of select="@class"/></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/pc8080/1.22.0/common.xsl"/>
<xsl:include href="/versions/pc8080/1.22.0/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="$MACHINECLASS"/></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/pc8080/1.22.0/common.xsl"/>
<xsl:include href="/versions/pc8080/1.22.0/document.xsl"/>
<xsl:include href="/versions/pc8080/1.22.0/components.xsl"/>
<xsl:template match="/outline">
<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="$MACHINECLASS"/></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="$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:stylesheet>

View file

@ -0,0 +1,202 @@
(function(){var m;function aa(a,b){var c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
function q(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function r(a){return"0x"+q(a,4)}function ba(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0<d&&(c=c.substr(0,d));b&&(d=c.lastIndexOf("."),0<d&&(c=c.substring(0,d)));return c}function ca(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
function da(a,b){return-1!==a.indexOf(b,a.length-b.length)}var ea={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function fa(a){return a.replace(/[&<>"']/g,function(a){return ea[a]})}function ga(a,b){return(a+" ").slice(0,b)}function ha(a){return String.prototype.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}
function ia(a,b,c){var d=0,e=a.length,f=0;for(void 0===c&&(c=function(a,b){return a>b?1:a<b?-1:0});d<e;){var h=d+e>>1,g;g=c(b,a[h]);0<g?d=h+1:(e=h,f=!g)}return f?d:~d}var ja=Date.now||function(){return+new Date};function ka(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}
function la(a,b){var c;if(Array.prototype.indexOf)return a.indexOf(b,c);c=c||0;0>c&&(c+=a.length);0>c&&(c=0);for(var d=a.length;c<d;c++)if(c in a&&a[c]===b)return c;return-1}
function ma(a,b,c,d){var e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),h;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:")||(e=g.status||-1),d&&d(a,f,e))});if(b&&"object"==
typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function na(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function oa(){return window?window.navigator.userAgent:""}function t(a){window&&window.alert(a)}function pa(a){var b=!1;window&&(b=window.confirm(a));return b}var qa=null;function ra(){if(null==qa){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}qa=a}return qa}
function xa(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}function ya(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function za(a){if(window){var b=oa();return"iOS"==a&&b.match(/(iPod|iPhone|iPad)/)&&b.match(/AppleWebKit/)||"MSIE"==a&&b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)?!0:!1}return!1}function Aa(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function Ba(a,b){function c(){b(100===d)&&(e=setTimeout(c,d),d=100)}var d=0,e=null,f=!1;a.onmousedown=function(){f||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);f=!0}}var Ca={init:[],show:[],exit:[]},Fa=!1,Ga=!0;function Ha(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function Ma(a){Ca.init.push(a)}
function Na(a){if(Ga)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){t("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function Oa(a){!Ga&&a?(Ga=!0,Fa&&Pa("init")):Ga=a}function Pa(a){Ca[a]&&Na(Ca[a])}Ha("onload",function(){Fa=!0;Na(Ca.init)});Ha("onpageshow",function(){Na(Ca.show)});Ha(za("Opera")||za("iOS")?"onunload":"onbeforeunload",function(){Na(Ca.exit)});
function u(a,b,c,d){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Db=b.comment;this.Qb=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Hb=this.id.substr(0,b),this.ab=this.id.substr(b+1)):this.ab=this.id;this[a]=c;this.w={Qa:!1,Na:!1,tb:!1,ga:!1,Pa:!1};this.ob=null;this.w.Pa=!1;this.T={};this.C=null;this.fa=d||0;w.push(this)}var Qa=void 0,Ra={};
if(window){Qa||(Qa=window.location.search.substr(1));for(var Sa,Ta=/\+/g,Ua=/([^&=]+)=?([^&]*)/g;Sa=Ua.exec(Qa);)Ra[decodeURIComponent(Sa[1].replace(Ta," "))]=decodeURIComponent(Sa[2].replace(Ta," "))}function Va(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
function x(a,b){b||(b=u);a.prototype=Va(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var w=[],Wa={};function Xa(a,b,c){Wa[a]&&b&&(Wa[a][b]=c)}function ab(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<w.length;b++){var d=w[b];a&&d.id.indexOf(a)||c.push(d)}return c}
function db(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<w.length;d++)if(c)c==w[d]&&(c=null);else if(!(a!=w[d].type||b&&w[d].id.indexOf(b)))return w[d]}return null}function y(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){t(c.message+" ("+a+")")}return b}
function eb(a,b){for(var c=A(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var h=e[f];if(1===h.nodeType){var g=h.getAttribute("class");if(g)for(var k=g.split(" "),l=0;l<k.length;l++)switch(g=k[l],g){case "pc8080-binding":(g=y(h))&&g.binding&&a.pa(g.type,g.binding,h,g.value),l=k.length}}}}
function A(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}
u.prototype={constructor:u,parent:null,toString:function(){return this.name?this.name:this.id||this.type},pa:function(a,b,c){switch(b){case "clear":return this.T[b]||(this.T[b]=c,c.onclick=function(a){return function(){a.T.print&&(a.T.print.value="")}}(this)),!0;case "print":return this.T[b]||(this.ra=this.T[b]=c,c.value="",this.g=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.na=function(a,b,c){this.g(a,"notice",c)}),!0;default:return!1}},log:function(){},g:function(){},status:function(a){this.g(this.ab+": "+a)},na:function(a,b){b||t(a)},xa:function(){return this.w.ga=!0},wa:function(a,b){b&&(this.w.ga=!1);return!0}};function fb(a,b,c,d,e,f){var h=!0;a.C&&(!0===h?h=0:null==h&&(h=a.fa),gb(a.C,a,b,c,d,e,f,h))}function hb(a,b){if(a.C){a===a.C?b|=0:b=b||a.fa;var c=a.C.fa&b;return!!b&&c===b||!!(c&a.C.Wb)}return!1}
function ib(a,b){if(a.w.tb)return a.w.Na&&(a.w.Na=!1),a.w.tb=!1;if(a.w.Pa)return a.g(a.toString()+" error"),!1;a.w.Na=b;return a.w.Na}function jb(a,b){a.w.Na&&(b?a.w.tb=!0:void 0===b&&a.g(a.toString()+" busy"));return a.w.Na}function B(a){if(!a.w.Pa&&(a.w.Qa=!0,a.w.Qa)){var b=a.ob;a.ob=null;b&&b()}}function kb(a,b){b&&(a.w.Qa?b():a.ob=b);return a.w.Qa}function lb(a,b){a.w.Pa=!0;a.na(b)}
var mb="undefined"!==typeof ArrayBuffer,nb=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];function ob(a){u.call(this,"Panel",a,ob)}x(ob);m=ob.prototype;m.pa=function(a,b,c,d){return this.u&&this.u.pa(a,b,c,d)||this.b&&this.b.pa(a,b,c,d)||this.A&&this.A.pa(a,b,c,d)||this.C&&this.C.pa(a,b,c,d)?!0:this.parent.pa.call(this,a,b,c,d)};m.Ba=function(a,b,c,d){this.u=a;this.D=b;this.b=c;this.C=d;this.A=pb(a,"Keyboard")};m.xa=function(a,b){b||qb();return!0};m.wa=function(){return!0};m.sa=function(){};
function qb(){for(var a=!1,b=A(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=y(d),f;a:{f=e.id;if(void 0!==f)for(var h=void 0,h=0;h<w.length;h++)if(w[h].id===f){f=w[h];break a}f=null}f||(a=!0,f=new ob(e));eb(f,d);a&&B(f)}}Ma(qb);
function rb(a,b,c){u.call(this,"Bus",a,rb);this.b=b;this.C=c;this.U=a.busWidth||16;this.Y=Math.pow(2,this.U);this.H=this.Y-1|0;this.Z=16>=this.U?10:20>=this.U?12:24>=this.U?14:15;this.ma=1<<this.Z;this.aa=this.ma>>2;this.F=this.ma-1;this.L=this.Y/this.ma|0;this.W=this.L-1;this.u=[];this.A=[];this.I=this.J=!1;this.ba=[];this.ea=[];a=new C;sb(a,this.C);this.D=Array(this.L);for(b=0;b<this.L;b++)this.D[b]=a;a=this.b;b=this.D;c=this.Z;var d=this.H;a.la=b;a.Z=c;a.ma=1<<a.Z;a.H=a.ma-1;a.aa=b.length;a.Y=
a.aa-1;a.L=d;B(this)}x(rb);rb.prototype.reset=function(){};rb.prototype.xa=function(a,b){b||this.reset();return!0};function tb(a,b,c,d){for(var e=b>>>a.Z;0<c&&e<a.D.length;){var f=a.D[e],h=e*a.ma,g=a.ma-(b-h);g>c&&(g=c);if(f&&f.size){if(f.type==d){if(b+c<=f.B)return f.kb+=f.B-b,f.B=b,!0;if(b>=f.B+f.kb){g=f.size-(b-h);g>c&&(g=c);f.kb=b-f.B+g;b=h+a.ma;c-=g;e++;continue}}return ub(1,b,c)}b=new C(b,g,a.ma,d);sb(b,a.C,f);a.D[e++]=b;b=h+a.ma;c-=g}return 0>=c?!0:ub(2,b,c)}
rb.prototype.V=function(a){return this.D[(a&this.H)>>>this.Z].Ka(a&this.F,a)};function vb(a,b){return a.D[(b&a.H)>>>a.Z].ib(b&a.F,b)}function wb(a,b,c){a.D[(b&a.H)>>>a.Z].lb(b&a.F,c&255,b)}function xb(a,b){if(void 0===b)return a.I=!a.I,a.I;void 0===a.u[b]&&(a.u[b]=[null,!1]);a.u[b][1]=!a.u[b][1];return a.u[b][1]}
function Gb(a,b,c){for(var d=1,e=0,f=0;0<d;){var h=a.u[b],g=a.ba[b]||1,k=1==g?255:2==g?65535:-1,l=k;void 0!==h?(h[0]&&(l=h[0](b,c),void 0===l?l=k:l&=k),a.C&&a.I!=h[1]&&Hb(a.C,b,l)):a.C&&(gb(a.C,a,b,null,c),a.I&&Hb(a.C,b,l));e|=l<<f;f+=g<<3;b+=g;d-=g}return e}function Ib(a,b){if(void 0===b)return a.J=!a.J,a.J;void 0===a.A[b]&&(a.A[b]=[null,!1]);a.A[b][1]=!a.A[b][1];return a.A[b][1]}
function Jb(a,b,c,d){for(var e=1,f=0;0<e;){var h=a.A[b],g=a.ea[b]||1,k=1==g?255:2==g?65535:-1,k=(c>>>=f)&k;if(void 0!==h){if(h[0])h[0](b,k,d);a.C&&a.J!=h[1]&&Kb(a.C,b,k)}else a.C&&(gb(a.C,a,b,k,d),a.J&&Kb(a.C,b,k));f+=g<<3;b+=g;e-=g}}function ub(a,b,c){t("Memory block error ("+a+": "+q(b)+","+q(c)+")");return!1}var Lb;if(mb){var Mb=new ArrayBuffer(2);(new DataView(Mb)).setUint16(0,256,!0);Lb=256===(new Uint16Array(Mb))[0]}else Lb=!1;var Nb=Lb;
function C(a,b,c,d){this.id=Ob+=2;this.b=null;this.B=a;this.kb=b;this.size=c||0;this.type=d||Pb;this.u=d==Qb;sb(this);this.Aa=this.Yb=!1;if(c)if(mb)this.H=new ArrayBuffer(c),this.I=new DataView(this.H,0,c),this.D=new Uint8Array(this.H,0,c),this.L=new Uint16Array(this.H,0,c>>1),this.b=new Int32Array(this.H,0,c>>2),Rb(this,Nb?Sb:Tb);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;Rb(this,Ub)}else Rb(this)}var Pb=0,Qb=2,Vb=["NONE","RAM","ROM","VIDEO","H/W"],Ob=0;
C.prototype={constructor:C,parent:null,save:function(){var a,b;if(mb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.I.getInt32(b<<2,!0);else a=this.b;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(mb)for(b=0;b<a.length;b++)this.I.setInt32(b<<2,a[b],!0);else this.b=a;return this.Aa=!0}return!1},Fa:function(a,b){b?0===this.A++&&Wb(this,Xb,!1):0===this.T++&&Yb(this,Xb,!1)},U:function(){this.C&&hb(this.C,129)&&this.C.message("attempt to read invalid block %"+q(this.B),!0);
return 255},F:function(a,b){this.C&&hb(this.C,129)&&this.C.message("attempt to write "+r(b)+" to invalid block %"+q(this.B),!0)},W:function(a,b){return this.Ka(a++,b++)|this.Ka(a,b)<<8},J:function(a,b,c){this.Za(a++,b&255,c++);this.Za(a,b>>8,c)},ea:function(a){return this.b[a>>2]>>>((a&3)<<3)&255},ta:function(a){var b=a>>2;a=(a&3)<<3;var c=this.b[b]>>a;return 24>a?c&65535:c&255|(this.b[b+1]&255)<<8},Da:function(a,b){var c=a>>2,d=(a&3)<<3;this.b[c]=this.b[c]&~(255<<d)|b<<d;this.Aa=!0},ab:function(a,
b){var c=a>>2,d=(a&3)<<3;24>d?this.b[c]=this.b[c]&~(65535<<d)|b<<d:(this.b[c]=this.b[c]&16777215|b<<24,c++,this.b[c]=this.b[c]&-256|b>>8);this.Aa=!0},aa:function(a,b){if(this.C&&null!=this.B){var c=this.C;Zb(c,this.B+a,1,c.ba)&&c.da(!0)}return this.ib(a,b)},ka:function(a,b){if(this.C&&null!=this.B){var c=this.C;Zb(c,this.B+a,2,c.ba)&&c.da(!0)}return this.yb(a,b)},za:function(a,b,c){if(this.C&&null!=this.B){var d=this.C;Zb(d,this.B+a,1,d.I)&&d.da(!0)}this.u?this.F(a,b,c):this.lb(a,b,c)},Ma:function(a,
b,c){if(this.C&&null!=this.B){var d=this.C;Zb(d,this.B+a,2,d.I)&&d.da(!0)}this.u?this.F(a,b,c):this.zb(a,b,c)},Y:function(a){return this.D[a]},ba:function(a){return this.D[a]},ja:function(a){return this.I.getUint16(a,!0)},qa:function(a){return a&1?this.D[a]|this.D[a+1]<<8:this.L[a>>1]},ua:function(a,b){this.D[a]=b;this.Aa=!0},Ca:function(a,b){this.D[a]=b;this.Aa=!0},Ea:function(a,b){this.I.setUint16(a,b,!0);this.Aa=!0},$a:function(a,b){a&1?(this.D[a]=b,this.D[a+1]=b>>8):this.L[a>>1]=b;this.Aa=!0}};
function sb(a,b,c){a.C=b;a.T=a.A=0;c&&((a.T=c.T)&&Yb(a,Xb,!1),(a.A=c.A)&&Wb(a,Xb,!1))}function $b(a,b){b?0===--a.A&&(a.Za=a.u?a.F:a.lb,a.Tb=a.u?a.J:a.zb):0===--a.T&&(a.Ka=a.ib,a.Rb=a.yb)}function Wb(a,b,c){c&&a.A||(a.Za=!a.u&&b[2]||a.F,a.Tb=!a.u&&b[3]||a.J);if(c||void 0===c)a.lb=b[2]||a.F,a.zb=b[3]||a.J}function Yb(a,b,c){c&&a.T||(a.Ka=b[0]||a.U,a.Rb=b[1]||a.W);if(c||void 0===c)a.ib=b[0]||a.U,a.yb=b[1]||a.W}function Rb(a,b){b||(b=ac);Yb(a,b,void 0);Wb(a,b,void 0)}
var ac=[],Ub=[C.prototype.ea,C.prototype.ta,C.prototype.Da,C.prototype.ab],Xb=[C.prototype.aa,C.prototype.ka,C.prototype.za,C.prototype.Ma];if(mb)var Tb=[C.prototype.Y,C.prototype.ja,C.prototype.ua,C.prototype.Ea],Sb=[C.prototype.ba,C.prototype.qa,C.prototype.Ca,C.prototype.$a];
function bc(a,b){u.call(this,"CPU",a,bc,1);var c=a.cycles||b,d=a.multiplier||1;this.i={};this.i.Xa=c;this.i.qb=0;this.i.Ja=d;this.i.vb=Math.round(this.i.Xa/1E4)/100;this.i.Ha=this.i.vb*this.i.Ja;this.w.ia=!1;this.w.ub=!1;this.w.Ib=a.autoStart;this.w.Jb=!1;this.w.Oa=!1;this.i.bb=this.i.Ua=0;this.i.cb=a.csStart;this.i.Ta=a.csInterval;this.i.Va=a.csStop;this.ka=this.La.bind(this);B(this)}x(bc);var cc=["power","reset"];m=bc.prototype;
m.Ba=function(a,b,c,d){this.u=a;this.D=b;this.C=d;for(b=0;b<cc.length;b++)(c=this.T[cc[b]])&&this.u.pa(null,cc[b],c);this.za=(b=pb(a,"Video"))&&Math.max(b.za,b.Zb)||60;this.W=pb(a,"ChipSet");a=oc(a,"autoStart");null!=a&&(this.w.Ib="true"==a?!0:"false"==a?!1:!!a);B(this)};m.reset=function(){this.i.qb=0};m.save=function(){return null};m.restore=function(){return!1};
m.xa=function(a,b){if(!b){if(a&&this.restore){pc(this);if(!this.restore(a))return!1;qc(this)}else this.reset();if(this.C){var c=this.C;c.g("Type ? for help with PC8080 Debugger commands");c.sa();if(c.rb){var d=c.rb;c.rb=null;rc(c,d)}}else this.g("No debugger detected")}sc(this);return!0};m.wa=function(a){return a?this.save():!0};function tc(a){(a.w.Ib||!a.C&&void 0===a.T.run)&&a.La(!0)}m.Mb=function(){return 0};
function qc(a){void 0===a.i.cb&&(a.i.cb=0);void 0===a.i.Ta&&(a.i.Ta=-1);void 0===a.i.Va&&(a.i.Va=-1);a.w.Oa=0<=a.i.cb&&0<a.i.Ta;a.w.Oa&&(a.i.bb=0,a.i.Ua=a.i.cb-a.J)}function uc(a,b){if(a.w.Oa){var c=!1;a.i.bb=a.i.bb+a.Mb()|0;a.i.Ua-=b;0>=a.i.Ua&&(a.i.Ua+=a.i.Ta,c=!0);0<=a.i.Va&&a.i.Va<=vc(a)&&(a.i.Ta=a.i.Va=-1,qc(a),a.da(),c=!0);c&&a.g(vc(a)+" cycles: checksum="+q(a.i.bb))}}
m.pa=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.T[b]=c;a=!0;break;case "run":this.T[b]=c;c.onclick=function(){var a;if(a=d.u)if(a=d.u,a.w.ga)a=!0;else{var b=null,c,g=ab(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.w.Qa);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.w.ga);c++);c==g.length&&(b=a);t("The "+b.type+" component ("+b.id+") is not "+(b.w.Qa?"powered yet":"ready yet"+(b.ob?" (waiting for notification)":""))+".");a=!1}a&&(d.w.ia?d.da(!0):d.La(!0))};a=
!0;break;case "speed":this.T[b]=c;a=!0;break;case "setSpeed":this.T[b]=c,c.onclick=function(){wc(d,d.i.Ja<<1,!0)},c.textContent=this.i.Ha.toFixed(2)+"Mhz",a=!0}return a};function xc(a,b,c){a.J+=b;c&&(a.F=a.b=0)}
function yc(a,b){var c=30;c<a.za&&(c=a.za);2>c&&(c=2);var d=1;b&&1<a.i.Ja&&a.i.Ga&&(d=a.i.Ga/a.i.vb);a.i.Nb=Math.round(1E3/30);a.i.hc=Math.floor(a.i.Xa/c*d);a.i.wb=Math.floor(a.i.Xa/30*d);a.i.Pb=Math.floor(a.i.Xa/a.za*d);a.i.Ob=Math.floor(a.i.Xa/2*d);b||(a.i.Wa=a.i.wb,a.i.fb=a.i.Pb,a.i.eb=a.i.Ob);a.i.xb=0}function vc(a){return a.J+a.I+a.F-a.b}function pc(a){a.i.Ga=0;a.J=a.I=a.F=a.b=0;qc(a);wc(a,1)}
function wc(a,b,c){var d=!1;if(void 0!==b){.8>a.i.Ga/a.i.Ha?b=1:d=!0;a.i.Ja=b;b=a.i.vb*a.i.Ja;if(a.i.Ha!=b){a.i.Ha=b;b=a.i.Ha.toFixed(2)+"Mhz";var e=a.T.setSpeed;e&&(e.textContent=b);a.g("target speed: "+b)}c&&a.u&&a.u.jb()}xc(a,a.I);a.I=0;a.i.Sa=ja();a.i.Ia=0;yc(a);return d}
m.La=function(a){if(ib(this,!0)){if(!this.w.ia){wc(this);this.u&&this.u.start(this.i.Sa,vc(this));this.w.ia=!0;this.w.ub=!0;this.W&&this.W.start();var b=this.T.run;b&&(b.textContent="Halt");this.u&&(this.u.sa(!0),a&&this.u.jb(!0))}this.i.xb>=this.i.Xa&&yc(this,!0);this.i.gb=0;this.i.pb=ja();this.i.Ia&&(a=this.i.pb-this.i.Ia,a>this.i.Nb&&(this.i.Sa+=a,this.i.Sa>this.i.pb&&(this.i.Sa=this.i.pb)));try{do{var c=this.w.Oa?1:this.i.hc;try{this.Ya(c)}catch(e){if("number"!=typeof e)throw e;}var d=this.F-
this.b;this.I+=d;this.i.gb+=d;xc(this,0,!0);uc(this,d);this.i.fb-=d;0>=this.i.fb&&(this.i.fb+=this.i.Pb,this.u&&zc(this.u,this.i.qb++),this.i.qb>this.za&&(this.i.qb=0));this.i.eb-=d;0>=this.i.eb&&(this.i.eb+=this.i.Ob,this.u&&this.u.sa());this.i.Wa-=d;if(0>=this.i.Wa){this.i.Wa+=this.i.wb;break}}while(this.w.ia)}catch(e){this.da();sc(this);this.u&&this.u.stop(ja(),vc(this));ib(this,!1);lb(this,e.stack||e.message);return}c=setTimeout;d=this.ka;this.i.Ia=ja();a=this.i.Nb;this.i.gb&&(a=Math.round(a*
this.i.gb/this.i.wb));a-=this.i.Ia-this.i.pb;if(b=this.i.Ia-this.i.Sa)this.i.Ga=Math.round(this.I/(10*b))/100,864E5<=b&&(this.J=0,wc(this));if(0>a||this.i.Ga<this.i.Ha)a=0;this.i.xb+=this.i.gb;this.i.Ia+=a;c(d,a)}else sc(this),this.u&&this.u.stop(ja(),vc(this))};m.Ya=function(){return 0};m.da=function(a){jb(this,!0);this.F-=this.b;this.b=0;xc(this,this.I);this.I=0;if(this.w.ia){this.w.ia=!1;this.W&&this.W.stop();var b=this.T.run;b&&(b.textContent="Run")}this.w.nb=a};
function sc(a,b){a.u&&(zc(a.u,-1),a.u.sa(b))}function Ac(a){this.Ra=a.model||8080;bc.call(this,a,1E6);this.ba=Bc;pc(this);this.w.nb=this.w.Xb=!1;this.ja=0;this.la=[];this.Z=this.ma=this.H=this.aa=this.Y=this.L=0;this.U=[];this.ea=0;Cc(this)}x(Ac,bc);function Dc(a,b){a.U.push(b)}m=Ac.prototype;m.reset=function(){this.w.ia&&this.da();Cc(this);pc(this);this.w.Pa=!1;this.parent.reset.call(this)};function Cc(a){a.j=0;a.M=0;a.N=0;a.O=0;a.P=0;a.R=0;a.S=0;a.ca=0;G(a,a.ea);Ec(a,0);a.A=0}
function Fc(a,b){a.ea=b;G(a,b)}m.Mb=function(){var a=this.j+this.M+this.N+this.O+this.P+this.R+this.S|0;return a=a+this.ca+this.K+Gc(this)|0};
m.save=function(){var a=new H(this);I(a,0,[this.j,this.M,this.N,this.O,this.P,this.R,this.S,this.ca,this.K,Gc(this)]);I(a,1,[this.A,this.J,this.i.Ja]);for(var b=this.D,c=0,d=[],e=0;e<b.L;e++){var f=b.D[e];if(f.Aa||f.Yb){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,k=0,l=[];g<f.length;){for(var n=f[g],p=g+1;p<f.length&&f[p]===n;)p++;l[k++]=p-g;l[k++]=n;g=p}if(l.length<f.length){f=l;break a}}d[h]=f}}I(a,2,d);return a.data()};
m.restore=function(a){var b=a[0];this.j=b[0];this.M=b[1];this.N=b[2];this.O=b[3];this.P=b[4];this.R=b[5];this.S=b[6];this.ca=b[7]&65535;G(this,b[8]);Ec(this,b[9]);b=a[1];this.A=b[0];this.J=b[1];wc(this,b[3]);a:{b=this.D;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.aa){for(var f=0,h=Array(b.aa),g=0;g<e.length-1;)for(var k=e[g++],l=e[g++];k--;)h[f++]=l;e=h}f=b.D[d];if(!f||!f.restore(e)){t("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
m.pa=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "SF":case "ZF":case "AF":case "PF":case "CF":this.T[b]=c;this.ja++;d=!0;break;default:d=this.parent.pa.call(this,a,b,c)}return d};function Hc(a){return a.M<<8|a.N}function Ic(a,b){a.M=b>>8&255;a.N=b&255}function Jc(a){return a.O<<8|a.P}function Kc(a,b){a.O=b>>8&255;a.P=b&255}function J(a){return a.R<<8|a.S}
function L(a,b){a.R=b>>8&255;a.S=b&255}function G(a,b){a.K=b&65535}function Lc(a){return a.G&256?1:0}function Mc(a){return nb[a.X&255]?4:0}function Nc(a){return(a.X^a.ha)&16?16:0}function Oc(a){return a.G&255?0:64}function Pc(a){return a.X&128?128:0}function Gc(a){return a.oa&-214|Pc(a)|Oc(a)|Nc(a)|Mc(a)|Lc(a)}function Ec(a,b){a.G=a.X=a.ha=0;b&1&&(a.G|=256);b&4||(a.X|=1);b&16&&(a.ha|=16);b&64||(a.G|=255);b&128&&(a.X^=192);a.oa=a.oa&-513|b&512|2}
function Qc(a,b){a.ha=a.j^b;return a.X=(a.G=a.j+b)&255}function Rc(a,b){a.ha=a.j^b;return a.X=(a.G=a.j+b+(a.G&256?1:0))&255}function Sc(a,b){a.G=a.X=a.ha=a.j&b;(a.j|b)&8&&(a.ha^=16);return a.G}function jd(a,b){a.ha=b^255;b=a.X=b+255&255;a.G=a.G&-256|b;return b}function kd(a,b){a.ha=b;b=a.X=b+1&255;a.G=a.G&-256|b;return b}function ld(a,b){return a.X=a.G=a.ha=a.j|b}function M(a,b){b^=255;a.ha=a.j^b;return a.X=(a.G=a.j+b+1^256)&255}
function md(a,b){b^=255;a.ha=a.j^b;return a.X=(a.G=a.j+b+(a.G&256?0:1)^256)&255}function nd(a,b){return a.X=a.G=a.ha=a.j^b}m.V=function(a){return this.la[(a&this.L)>>>this.Z].Ka(a&this.H,a)};function od(a,b){var c=b&a.H,d=(b&a.L)>>>a.Z;if(c<a.H)return a.la[d].Rb(c,b);c=a.la[d].Ka(c,b);return c|=a.la[d+1&a.Y].Ka(0,b+1)<<8}function N(a,b,c){a.la[(b&a.L)>>>a.Z].Za(b&a.H,c&255,b)}
function pd(a,b,c){var d=b&a.H,e=(b&a.L)>>>a.Z;d<a.H?a.la[e].Tb(d,c&65535,b):(a.la[e++].Za(d,c&255,b),a.la[e&a.Y].Za(0,c>>8&255,b+1))}function O(a){var b=a.V(a.K);G(a,a.K+1);return b}function P(a){var b=od(a,a.K);G(a,a.K+2);return b}function Q(a){var b=od(a,a.ca);a.ca=a.ca+2&65535;return b}function R(a,b){a.ca=a.ca-2&65535;pd(a,a.ca,b)}
function T(a,b,c,d){d=d||2;a.T[b]&&(void 0===c&&(lb(a,"Value for "+b+" is invalid"),a.da()),c=!a.w.ia||a.w.Jb?q(c,d):"--------".substr(0,d),a.T[b].textContent!=c&&(a.T[b].textContent=c))}
m.sa=function(a){this.ja&&(a||!this.w.ia||this.w.Jb)&&(T(this,"A",this.j),T(this,"B",this.M),T(this,"C",this.N),T(this,"BC",Hc(this),4),T(this,"D",this.O),T(this,"E",this.P),T(this,"DE",Jc(this),4),T(this,"H",this.R),T(this,"L",this.S),T(this,"HL",J(this),4),T(this,"SP",this.ca,4),T(this,"PC",this.K,4),a=Gc(this),T(this,"PS",a,4),T(this,"SF",a&128,1),T(this,"ZF",a&64,1),T(this,"AF",a&16,1),T(this,"PF",a&4,1),T(this,"CF",a&1,1));if(a=this.T.speed)a.textContent=this.w.ia&&this.i.Ga?this.i.Ga.toFixed(2)+
"Mhz":"Stopped"};m.Ya=function(a){this.w.nb=!0;var b=this.w.Xb=this.C&&qd(this.C),c=a?this.w.ub?0:1:-1;this.w.ub=!1;this.F=this.b=a;do{if(this.A){var d;this.A&8&&this.oa&512?(d=199|(this.A&7)<<3,this.A&=-16,this.oa&=-513,this.ba[d].call(this),d=!0):d=!1;if(d){if(!a){this.g("interrupt dispatched");break}}else if(this.A&16){this.b=0;break}}if(b){if(rd(this.C,this.K,c)){this.da();break}c=1}this.ba[O(this)].call(this)}while(0<this.b);return this.w.nb?this.F-this.b:void 0===this.w.nb?0:-1};
Ma(function(){for(var a=A(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Ac(d);eb(d,c)}});function sd(){this.b-=4}function td(){G(this,P(this));this.b-=10}function ud(){G(this,Q(this));this.b-=10}function vd(){var a=P(this);R(this,this.K);G(this,a);this.b-=17}
var Bc=[sd,function(){Ic(this,P(this));this.b-=10},function(){N(this,Hc(this),this.j);this.b-=7},function(){Ic(this,Hc(this)+1);this.b-=5},function(){this.M=kd(this,this.M);this.b-=5},function(){this.M=jd(this,this.M);this.b-=5},function(){this.M=O(this);this.b-=7},function(){var a=this.j<<1;this.j=a&255|a>>8;this.G=this.G&255|a&256;this.b-=4},sd,function(){var a;L(this,a=J(this)+Hc(this));this.G=this.G&255|a>>8&256;this.b-=10},function(){this.j=this.V(Hc(this));this.b-=7},function(){Ic(this,Hc(this)-
1);this.b-=5},function(){this.N=kd(this,this.N);this.b-=5},function(){this.N=jd(this,this.N);this.b-=5},function(){this.N=O(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(a|this.j)>>1;this.G=this.G&255|a;this.b-=4},sd,function(){Kc(this,P(this));this.b-=10},function(){N(this,Jc(this),this.j);this.b-=7},function(){Kc(this,Jc(this)+1);this.b-=5},function(){this.O=kd(this,this.O);this.b-=5},function(){this.O=jd(this,this.O);this.b-=5},function(){this.O=O(this);this.b-=7},function(){var a=this.j<<
1;this.j=a&255|this.G>>8;this.G=this.G&255|a&256;this.b-=4},sd,function(){var a;L(this,a=J(this)+Jc(this));this.G=this.G&255|a>>8&256;this.b-=10},function(){this.j=this.V(Jc(this));this.b-=7},function(){Kc(this,Jc(this)-1);this.b-=5},function(){this.P=kd(this,this.P);this.b-=5},function(){this.P=jd(this,this.P);this.b-=5},function(){this.P=O(this);this.b-=7},function(){var a=this.j<<8&256;this.j=(this.G&256|this.j)>>1;this.G=this.G&255|a;this.b-=4},sd,function(){L(this,P(this));this.b-=10},function(){pd(this,
P(this),J(this));this.b-=16},function(){L(this,J(this)+1);this.b-=5},function(){this.R=kd(this,this.R);this.b-=5},function(){this.R=jd(this,this.R);this.b-=5},function(){this.R=O(this);this.b-=7},function(){var a=0,b=Lc(this);if(Nc(this)||9<(this.j&15))a|=6;if(b||154<=this.j)a|=96,b=1;this.j=Qc(this,a);this.G=b?this.G|256:this.G&-257;this.b-=4},sd,function(){var a;L(this,a=J(this)+J(this));this.G=this.G&255|a>>8&256;this.b-=10},function(){L(this,od(this,P(this)));this.b-=16},function(){L(this,J(this)-
1);this.b-=5},function(){this.S=kd(this,this.S);this.b-=5},function(){this.S=jd(this,this.S);this.b-=5},function(){this.S=O(this);this.b-=7},function(){this.j=~this.j&255;this.b-=4},sd,function(){this.ca=P(this)&65535;this.b-=10},function(){N(this,P(this),this.j);this.b-=13},function(){this.ca=this.ca+1&65535;this.b-=5},function(){var a=J(this);N(this,a,kd(this,this.V(a)));this.b-=10},function(){var a=J(this);N(this,a,jd(this,this.V(a)));this.b-=10},function(){N(this,J(this),O(this));this.b-=10},
function(){this.G|=256;this.b-=4},sd,function(){var a;L(this,a=J(this)+this.ca);this.G=this.G&255|a>>8&256;this.b-=10},function(){this.j=this.V(P(this));this.b-=13},function(){this.ca=this.ca-1&65535;this.b-=5},function(){this.j=kd(this,this.j);this.b-=5},function(){this.j=jd(this,this.j);this.b-=5},function(){this.j=O(this);this.b-=7},function(){this.G=Lc(this)?this.G&-257:this.G|256;this.b-=4},function(){this.b-=5},function(){this.M=this.N;this.b-=5},function(){this.M=this.O;this.b-=5},function(){this.M=
this.P;this.b-=5},function(){this.M=this.R;this.b-=5},function(){this.M=this.S;this.b-=5},function(){this.M=this.V(J(this));this.b-=7},function(){this.M=this.j;this.b-=5},function(){this.N=this.M;this.b-=5},function(){this.b-=5},function(){this.N=this.O;this.b-=5},function(){this.N=this.P;this.b-=5},function(){this.N=this.R;this.b-=5},function(){this.N=this.S;this.b-=5},function(){this.N=this.V(J(this));this.b-=7},function(){this.N=this.j;this.b-=5},function(){this.O=this.M;this.b-=5},function(){this.O=
this.N;this.b-=5},function(){this.b-=5},function(){this.O=this.P;this.b-=5},function(){this.O=this.R;this.b-=5},function(){this.O=this.S;this.b-=5},function(){this.O=this.V(J(this));this.b-=7},function(){this.O=this.j;this.b-=5},function(){this.P=this.M;this.b-=5},function(){this.P=this.N;this.b-=5},function(){this.P=this.O;this.b-=5},function(){this.b-=5},function(){this.P=this.R;this.b-=5},function(){this.P=this.S;this.b-=5},function(){this.P=this.V(J(this));this.b-=7},function(){this.P=this.j;
this.b-=5},function(){this.R=this.M;this.b-=5},function(){this.R=this.N;this.b-=5},function(){this.R=this.O;this.b-=5},function(){this.R=this.P;this.b-=5},function(){this.b-=5},function(){this.R=this.S;this.b-=5},function(){this.R=this.V(J(this));this.b-=7},function(){this.R=this.j;this.b-=5},function(){this.S=this.M;this.b-=5},function(){this.S=this.N;this.b-=5},function(){this.S=this.O;this.b-=5},function(){this.S=this.P;this.b-=5},function(){this.S=this.R;this.b-=5},function(){this.b-=5},function(){this.S=
this.V(J(this));this.b-=7},function(){this.S=this.j;this.b-=5},function(){N(this,J(this),this.M);this.b-=7},function(){N(this,J(this),this.N);this.b-=7},function(){N(this,J(this),this.O);this.b-=7},function(){N(this,J(this),this.P);this.b-=7},function(){N(this,J(this),this.R);this.b-=7},function(){N(this,J(this),this.S);this.b-=7},function(){var a=this.K-1;if(this.U.length)for(var b=0;b<this.U.length;b++)if(this.U[b](a))return;this.A|=16;this.b-=7;this.C&&hb(this,-2147483648)?(G(this,a),this.C.da()):
this.oa&512||(this.C&&G(this,a),this.da())},function(){N(this,J(this),this.j);this.b-=7},function(){this.j=this.M;this.b-=5},function(){this.j=this.N;this.b-=5},function(){this.j=this.O;this.b-=5},function(){this.j=this.P;this.b-=5},function(){this.j=this.R;this.b-=5},function(){this.j=this.S;this.b-=5},function(){this.j=this.V(J(this));this.b-=7},function(){this.b-=5},function(){this.j=Qc(this,this.M);this.b-=4},function(){this.j=Qc(this,this.N);this.b-=4},function(){this.j=Qc(this,this.O);this.b-=
4},function(){this.j=Qc(this,this.P);this.b-=4},function(){this.j=Qc(this,this.R);this.b-=4},function(){this.j=Qc(this,this.S);this.b-=4},function(){this.j=Qc(this,this.V(J(this)));this.b-=7},function(){this.j=Qc(this,this.j);this.b-=4},function(){this.j=Rc(this,this.M);this.b-=4},function(){this.j=Rc(this,this.N);this.b-=4},function(){this.j=Rc(this,this.O);this.b-=4},function(){this.j=Rc(this,this.P);this.b-=4},function(){this.j=Rc(this,this.R);this.b-=4},function(){this.j=Rc(this,this.S);this.b-=
4},function(){this.j=Rc(this,this.V(J(this)));this.b-=7},function(){this.j=Rc(this,this.j);this.b-=4},function(){this.j=M(this,this.M);this.b-=4},function(){this.j=M(this,this.N);this.b-=4},function(){this.j=M(this,this.O);this.b-=4},function(){this.j=M(this,this.P);this.b-=4},function(){this.j=M(this,this.R);this.b-=4},function(){this.j=M(this,this.S);this.b-=4},function(){this.j=M(this,this.V(J(this)));this.b-=7},function(){this.j=M(this,this.j);this.b-=4},function(){this.j=md(this,this.M);this.b-=
4},function(){this.j=md(this,this.N);this.b-=4},function(){this.j=md(this,this.O);this.b-=4},function(){this.j=md(this,this.P);this.b-=4},function(){this.j=md(this,this.R);this.b-=4},function(){this.j=md(this,this.S);this.b-=4},function(){this.j=md(this,this.V(J(this)));this.b-=7},function(){this.j=md(this,this.j);this.b-=4},function(){this.j=Sc(this,this.M);this.b-=4},function(){this.j=Sc(this,this.N);this.b-=4},function(){this.j=Sc(this,this.O);this.b-=4},function(){this.j=Sc(this,this.P);this.b-=
4},function(){this.j=Sc(this,this.R);this.b-=4},function(){this.j=Sc(this,this.S);this.b-=4},function(){this.j=Sc(this,this.V(J(this)));this.b-=7},function(){this.j=Sc(this,this.j);this.b-=4},function(){this.j=nd(this,this.M);this.b-=4},function(){this.j=nd(this,this.N);this.b-=4},function(){this.j=nd(this,this.O);this.b-=4},function(){this.j=nd(this,this.P);this.b-=4},function(){this.j=nd(this,this.R);this.b-=4},function(){this.j=nd(this,this.S);this.b-=4},function(){this.j=nd(this,this.V(J(this)));
this.b-=7},function(){this.j=nd(this,this.j);this.b-=4},function(){this.j=ld(this,this.M);this.b-=4},function(){this.j=ld(this,this.N);this.b-=4},function(){this.j=ld(this,this.O);this.b-=4},function(){this.j=ld(this,this.P);this.b-=4},function(){this.j=ld(this,this.R);this.b-=4},function(){this.j=ld(this,this.S);this.b-=4},function(){this.j=ld(this,this.V(J(this)));this.b-=7},function(){this.j=ld(this,this.j);this.b-=4},function(){M(this,this.M);this.b-=4},function(){M(this,this.N);this.b-=4},function(){M(this,
this.O);this.b-=4},function(){M(this,this.P);this.b-=4},function(){M(this,this.R);this.b-=4},function(){M(this,this.S);this.b-=4},function(){M(this,this.V(J(this)));this.b-=7},function(){M(this,this.j);this.b-=4},function(){Oc(this)||(G(this,Q(this)),this.b-=6);this.b-=5},function(){Ic(this,Q(this));this.b-=10},function(){var a=P(this);Oc(this)||G(this,a);this.b-=10},td,function(){var a=P(this);Oc(this)||(R(this,this.K),G(this,a),this.b-=6);this.b-=11},function(){R(this,Hc(this));this.b-=11},function(){this.j=
Qc(this,O(this));this.b-=7},function(){R(this,this.K);G(this,0);this.b-=11},function(){Oc(this)&&(G(this,Q(this)),this.b-=6);this.b-=5},ud,function(){var a=P(this);Oc(this)&&G(this,a);this.b-=10},td,function(){var a=P(this);Oc(this)&&(R(this,this.K),G(this,a),this.b-=6);this.b-=11},vd,function(){this.j=Rc(this,O(this));this.b-=7},function(){R(this,this.K);G(this,8);this.b-=11},function(){Lc(this)||(G(this,Q(this)),this.b-=6);this.b-=5},function(){Kc(this,Q(this));this.b-=10},function(){var a=P(this);
Lc(this)||G(this,a);this.b-=10},function(){var a=O(this);Jb(this.D,a,this.j,this.K+-2&65535);this.b-=10},function(){var a=P(this);Lc(this)||(R(this,this.K),G(this,a),this.b-=6);this.b-=11},function(){R(this,Jc(this));this.b-=11},function(){this.j=M(this,O(this));this.b-=7},function(){R(this,this.K);G(this,16);this.b-=11},function(){Lc(this)&&(G(this,Q(this)),this.b-=6);this.b-=5},ud,function(){var a=P(this);Lc(this)&&G(this,a);this.b-=10},function(){var a=O(this);this.j=Gb(this.D,a,this.K+-2&65535)&
255;this.b-=10},function(){var a=P(this);Lc(this)&&(R(this,this.K),G(this,a),this.b-=6);this.b-=11},vd,function(){this.j=md(this,O(this));this.b-=7},function(){R(this,this.K);G(this,24);this.b-=11},function(){Mc(this)||(G(this,Q(this)),this.b-=6);this.b-=5},function(){L(this,Q(this));this.b-=10},function(){var a=P(this);Mc(this)||G(this,a);this.b-=10},function(){var a=Q(this);R(this,J(this));L(this,a);this.b-=18},function(){var a=P(this);Mc(this)||(R(this,this.K),G(this,a),this.b-=6);this.b-=11},
function(){R(this,J(this));this.b-=11},function(){this.j=Sc(this,O(this));this.b-=7},function(){R(this,this.K);G(this,32);this.b-=11},function(){Mc(this)&&(G(this,Q(this)),this.b-=6);this.b-=5},function(){G(this,J(this));this.b-=5},function(){var a=P(this);Mc(this)&&G(this,a);this.b-=10},function(){var a=J(this);L(this,Jc(this));Kc(this,a);this.b-=5},function(){var a=P(this);Mc(this)&&(R(this,this.K),G(this,a),this.b-=6);this.b-=11},vd,function(){this.j=nd(this,O(this));this.b-=7},function(){R(this,
this.K);G(this,40);this.b-=11},function(){Pc(this)||(G(this,Q(this)),this.b-=6);this.b-=5},function(){var a=Q(this);Ec(this,a);this.j=a>>8;this.b-=10},function(){var a=P(this);Pc(this)||G(this,a);this.b-=10},function(){this.oa&=-513;this.b-=4},function(){var a=P(this);Pc(this)||(R(this,this.K),G(this,a),this.b-=6);this.b-=11},function(){R(this,Gc(this)&255|this.j<<8);this.b-=11},function(){this.j=ld(this,O(this));this.b-=7},function(){R(this,this.K);G(this,48);this.b-=11},function(){Pc(this)&&(G(this,
Q(this)),this.b-=6);this.b-=5},function(){this.ca=J(this)&65535;this.b-=5},function(){var a=P(this);Pc(this)&&G(this,a);this.b-=10},function(){this.oa|=512;this.b-=4},function(){var a=P(this);Pc(this)&&(R(this,this.K),G(this,a),this.b-=6);this.b-=11},vd,function(){M(this,O(this));this.b-=7},function(){R(this,this.K);G(this,56);this.b-=11}];
function U(a){u.call(this,"ChipSet",a,U,32768);var b=a.model;b&&!wd[b]&&t("Unrecognized ChipSet model: "+b);this.Ra=wd[b]||xd;a.sound&&(this.W=null,window&&(this.W=window.AudioContext||window.webkitAudioContext),this.W&&new this.W);B(this)}x(U);var xd=1978.1,wd={SI1978:xd};m=U.prototype;m.pa=function(){return!1};
m.Ba=function(a,b,c,d){this.D=b;this.b=c;this.C=d;this.u=a;if(this.Ra==xd){var e;a=yd;void 0===e&&(e=0);for(var f in a){c=b;d=+f+e;var h=a[f].bind(this);if(void 0!==h)for(var g=+f+e;g<=d;g++)void 0!==c.u[g]?t("Input port "+r(g)+" already registered"):c.u[g]=[h,!1]}var k;e=zd;void 0===k&&(k=0);for(var l in e)if(f=b,a=+l+k,c=e[l].bind(this),void 0!==c)for(d=+l+k;d<=a;d++)void 0!==f.A[d]?t("Output port "+r(d)+" already registered"):f.A[d]=[c,!1]}};
m.xa=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.wa=function(a){return a?this.save():!0};m.reset=function(){this.H=this.I=this.F=this.A=this.U=this.L=this.J=0};m.save=function(){var a=new H(this);this.Ra==xd&&I(a,0,[this.J,this.L,this.U,this.A,this.F,this.H,this.I]);return a.data()};m.restore=function(a){a=a[0];this.Ra==xd&&(this.J=a[0],this.L=a[1],this.U=a[2],this.A=a[3],this.F=a[4],this.H=a[5],this.I=a[6]);return!0};m.start=function(){};m.stop=function(){};
m.bc=function(a,b){var c=this.J;fb(this,a,null,b,"STATUS0",c);return c};m.cc=function(a,b){var c=this.L;fb(this,a,null,b,"STATUS1",c);return c};m.dc=function(a,b){var c=this.U;fb(this,a,null,b,"STATUS2",c);return c};m.ac=function(a,b){var c=this.A>>8-this.F&255;fb(this,a,null,b,"SHIFT.RESULT",c);return c};m.ic=function(a,b,c){fb(this,a,b,c,"SHIFT.COUNT",null);this.F=b};m.kc=function(a,b,c){fb(this,a,b,c,"SOUND1",null);this.H=b};
m.jc=function(a,b,c){fb(this,a,b,c,"SHIFT.DATA",null);this.A=b<<8|this.A>>8};m.lc=function(a,b,c){fb(this,a,b,c,"SOUND2",null);this.I=b};m.mc=function(a,b,c){fb(this,a,b,c,"WATCHDOG",null)};var yd={0:U.prototype.bc,1:U.prototype.cc,2:U.prototype.dc,3:U.prototype.ac},zd={2:U.prototype.ic,3:U.prototype.kc,4:U.prototype.jc,5:U.prototype.lc,6:U.prototype.mc};Ma(function(){for(var a=A(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new U(d);eb(d,c)}});
function Ad(a){u.call(this,"ROM",a,Ad);this.u=null;this.I=a.addr;this.A=a.size;this.J=a.writable;this.F=a.alias;this.H=a.file;this.L=ba(this.H);if(this.H){a=this.H;var b=ca(this.L);"json"!=b&&"hex"!=b&&(a=na()+"/api/v1/dump?file="+this.H+"&format=bytes&decimal=true");var c=this;ma(a,null,!0,function(a,b,f){Bd(c,a,b,f)})}}x(Ad);var Cd=[0,5];Ad.prototype.Ba=function(a,b,c,d){this.D=b;this.b=c;this.C=d;Dd(this)};
Ad.prototype.xa=function(){if(this.ya){if(this.C){var a=this.C,b=this.id,c=this.I,d=this.A,e=this.ya,f=[],h;for(h in e){var g=e[h];"number"==typeof g&&(e[h]=g={o:g});var k=g.o,l=g.a;if(void 0!==k){var n=f,k=[k>>>0,h],p=ia(n,k,a.Eb);0>p&&n.splice(-(p+1),0,k)}l&&(g.a=l.replace(/''/g,'"'))}a.J.push({nc:b,B:c,gc:d,ya:e,Bb:f})}delete this.ya}return!0};Ad.prototype.wa=function(){return!0};
function Bd(a,b,c,d){if(d)a.na("Unable to load system ROM (error "+d+": "+b+")");else{Xa(a.Hb,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.u=f;else if(h)for(a.u=Array(4*h.length),d=c=0;c<h.length;c++)a.u[d++]=h[c]&255,a.u[d++]=h[c]>>8&255,a.u[d++]=h[c]>>16&255,a.u[d++]=h[c]>>24&255;else a.u=e;a.ya=e.symbols;if(!a.u.length){t("Empty ROM: "+b);return}if(1==a.u.length){t(a.u[0]);return}}catch(g){a.na("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
" ").replace(/ +$/,"").split(" "),a.u=Array(b.length),e=0;e<b.length;e++)a.u[e]=aa(b[e],16);Dd(a)}}
function Dd(a){if(!kb(a))if(!a.H)B(a);else if(a.u&&a.D){a.A||(a.A=a.u.length);if(a.u.length!=a.A)lb(a,"ROM size (0x"+q(a.u.length)+") does not match specified size ("+("0x"+q(a.A))+")");else if(Ed(a,a.I)){var b=[];"number"==typeof a.F?b.push(a.F):null!=a.F&&a.F.length&&(b=a.F);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.D,h=d.A,g=[],k=d.I>>>f.Z;0<h&&k<f.D.length;)g.push(f.D[k++]),h-=f.ma;f=d.D;d=d.A;h=0;for(e>>>=f.Z;0<d&&e<f.D.length;){k=g[h++];if(!k)break;f.D[e++]=k;d-=f.ma}}delete a.u}B(a)}}
function Ed(a,b){if(tb(a.D,b,a.A,a.J?1:Qb)){var c;for(c=0;c<a.u.length;c++)wb(a.D,b+c,a.u[c]);if(a.J&&256==b){for(c=0;c<Cd.length;c++)wb(a.D,Cd[c],118);Dc(a.b,function(a){return function(b){if(0<=Cd.indexOf(b)){var c=!1,h=a.b,g=a.C;if(5==b)switch(c=!0,h.N){case 2:Fd(a,String.fromCharCode(h.P));break;case 9:for(var k=Jc(h),l="",n=255;n--;){var p=a.b.V(k++);if(36==p)break;l+=String.fromCharCode(p)}Fd(a,l);break;default:c=!1}c?ud.call(h):g&&(a.g("\nCP/M vector "+r(b)),G(h,b),g.da());b=!0}else b=!1;return b}}(a));
Fc(a.b,b)}return!0}return!1}function Fd(a,b){b=b.replace(/\r/g,"");a.ra&&(a.ra.value+=b,a.ra.scrollTop=a.ra.scrollHeight)}Ma(function(){for(var a=A(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Ad(d);eb(d,c)}});function Gd(a){u.call(this,"RAM",a,Gd);this.F=a.addr;this.A=a.size;this.u=!1}x(Gd);m=Gd.prototype;m.Ba=function(a,b,c,d){this.D=b;this.b=c;this.C=d;B(this)};m.xa=function(a,b){b||this.reset();return!0};m.wa=function(a){return a?this.save():!0};
m.reset=function(){!this.u&&this.A&&tb(this.D,this.F,this.A,1)&&(this.u=!0,this.status(Math.floor(this.A/1024)+"Kb allocated"));this.u||t("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};Ma(function(){for(var a=A(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Gd(d);eb(d,c)}});function Hd(a){u.call(this,"Keyboard",a,Hd,65536);B(this)}x(Hd);
Ma(function(){for(var a=A(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Hd(d);eb(d,c)}});function Id(a){u.call(this,"Video",a,Id,262144);this.Zb=a.interruptRate;this.za=a.refreshRate||60;B(this)}x(Id);Id.prototype.Ba=function(a,b,c,d){this.u=a;this.D=b;this.b=c;this.C=d};
Ma(function(){for(var a=A(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=y(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=oa().indexOf("MSIE")&&(c.onresize=function(a,b,c,d){return function(){b.style.height=
(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Ra.aspect);f&&.3<=f&&3.33>=f&&(Ha("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");za("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);e.getContext("2d");d=new Id(d);eb(d,c)}});
function Jd(a){u.call(this,"Debugger",a,Jd);this.aa=Kd;this.ja=this.Ma=this.U=0;this.Y=W();this.Fb=W();this.H=-1;this.F=[];this.qa=!1;this.ka=W();this.J=[];this.ta={};this.A=this.ba=this.I=[];Ld(this);this.Da=0;Md(this);this.$a=[];Nd(this,a.messages);this.rb=a.commands;var b=this;window?void 0===window.$&&(window.$=function(a){return rc(b,a)}):void 0===global.$&&(global.$=function(a){return rc(b,a)})}x(Jd);
var Od={"?":"help/print","a [#]":"assemble","b [#]":"breakpoint",c:"clear output","d [#]":"dump memory","e [#]":"edit memory",f:"frequencies","g [#]":"go [to #]",h:"halt","i [#]":"input port #","if":"eval expression",k:"stack trace",ln:"list nearest symbol(s)",m:"messages","o [#]":"output port #",p:"step over",print:"print expression",r:"dump/set registers",reset:"reset machine",s:"set options","t [#]":"trace","u [#]":"unassemble",v:"print version","var":"assign variable"},Kd=8080,Pd="NONE ACI ADC ADD ADI ANA ANI CALL CC CM CNC CNZ CP CPE CPO CZ CMA CMC CMP CPI DAA DAD DCR DCX DI EI HLT IN INR INX JMP JC JM JNC JNZ JP JPE JPO JZ LDA LDAX LHLD LXI MOV MVI NOP ORA ORI OUT PCHL POP PUSH RAL RAR RET RC RM RNC RNZ RP RPE RPO RZ RLC RRC RST SBB SBI SHLD SPHL STA STAX STC SUB SUI XCHG XRA XRI XTHL".split(" "),
Qd="NONE ADC ADC ADD ADD AND AND CALL CALLC CALLS CALLNC CALLNZ CALLNS CALLP CALLNP CALLZ NOT CMC CMP CMP DAA ADD DEC DEC CLI STI HLT IN INC INC JMP JC JS JNC JNZ JNS JP JNP JZ MOV MOV MOV MOV MOV MOV NOP OR OR OUT JMP POP PUSH RCL RCR RET RETC RETS RETNC RETNZ RETNS RETP RETNP RETZ ROL ROR RST SBB SBB MOV MOV MOV MOV STC SUB SUB XCHG XOR XOR XCHG".split(" "),Rd="B C D E H L M A BC DE HL SP PC PSW".split(" "),Sd=[[45],[42,2067,32],[71,2131,18193],[29,2067],[28,17],[22,17],[44,17,32],[63],[45,32768],
[21,18963,2067],[40,18193,2131],[23,2067],[28,273],[22,273],[44,273,32],[64],[45,32768],[42,2323,32],[71,2387,18193],[29,2323],[28,529],[22,529],[44,529,32],[52],[45,32768],[21,18963,2323],[40,18193,2387],[23,2323],[28,785],[22,785],[44,785,32],[53],[45,32768],[42,2579,32],[68,115,18963],[29,2579],[28,1041],[22,1041],[44,1041,32],[20],[45,32768],[21,18963,2579],[41,18963,115],[23,2579],[28,1297],[22,1297],[44,1297,32],[16,18193],[45,32768],[42,2835,32],[70,115,18193],[29,2835],[28,1617],[22,1617],
[44,1617,32],[72],[45,32768],[21,18963,2835],[39,18193,115],[23,2835],[28,1809],[22,1809],[44,1809,32],[17],[43,17,17],[43,17,273],[43,17,529],[43,17,785],[43,17,1041],[43,17,1297],[43,17,1617],[43,17,1809],[43,273,17],[43,273,273],[43,273,529],[43,273,785],[43,273,1041],[43,273,1297],[43,273,1617],[43,273,1809],[43,529,17],[43,529,273],[43,529,529],[43,529,785],[43,529,1041],[43,529,1297],[43,529,1617],[43,529,1809],[43,785,17],[43,785,273],[43,785,529],[43,785,785],[43,785,1041],[43,785,1297],[43,
785,1617],[43,785,1809],[43,1041,17],[43,1041,273],[43,1041,529],[43,1041,785],[43,1041,1041],[43,1041,1297],[43,1041,1617],[43,1041,1809],[43,1297,17],[43,1297,273],[43,1297,529],[43,1297,785],[43,1297,1041],[43,1297,1297],[43,1297,1617],[43,1297,1809],[43,1617,17],[43,1617,273],[43,1617,529],[43,1617,785],[43,1617,1041],[43,1617,1297],[26],[43,1617,1809],[43,1809,17],[43,1809,273],[43,1809,529],[43,1809,785],[43,1809,1041],[43,1809,1297],[43,1809,1617],[43,1809,1809],[3,18193,17],[3,18193,273],
[3,18193,529],[3,18193,785],[3,18193,1041],[3,18193,1297],[3,18193,1617],[3,18193,1809],[2,18193,17],[2,18193,273],[2,18193,529],[2,18193,785],[2,18193,1041],[2,18193,1297],[2,18193,1617],[2,18193,1809],[73,18193,17],[73,18193,273],[73,18193,529],[73,18193,785],[73,18193,1041],[73,18193,1297],[73,18193,1617],[73,18193,1809],[66,18193,17],[66,18193,273],[66,18193,529],[66,18193,785],[66,18193,1041],[66,18193,1297],[66,18193,1617],[66,18193,1809],[5,18193,17],[5,18193,273],[5,18193,529],[5,18193,785],
[5,18193,1041],[5,18193,1297],[5,18193,1617],[5,18193,1809],[76,18193,17],[76,18193,273],[76,18193,529],[76,18193,785],[76,18193,1041],[76,18193,1297],[76,18193,1617],[76,18193,1809],[46,18193,17],[46,18193,273],[46,18193,529],[46,18193,785],[46,18193,1041],[46,18193,1297],[46,18193,1617],[46,18193,1809],[18,18193,17],[18,18193,273],[18,18193,529],[18,18193,785],[18,18193,1041],[18,18193,1297],[18,18193,1617],[18,18193,1809],[58],[50,2067],[34,51],[30,51],[11,51],[51,2067],[4,18193,33],[65,128],[62],
[54],[38,51],[30,32819],[15,51],[7,51],[1,18193,33],[65,128],[57],[50,2323],[33,51],[48,33,18193],[10,51],[51,2323],[74,18193,33],[65,128],[55],[54,32768],[31,51],[27,18193,33],[8,51],[7,32819],[67,18193,33],[65,128],[61],[50,2579],[37,51],[78,19283,18963],[14,51],[51,2579],[6,18193,33],[65,128],[60],[49,2579],[36,51],[75,18963,18707],[13,51],[7,32819],[77,18193,33],[65,128],[59],[50,3347],[35,51],[24],[12,51],[51,3347],[47,18193,33],[65,128],[56],[69,19219,18963],[32,51],[25],[9,51],[7,32819],[19,
18193,33],[65,128]],Td={cpu:1,bus:64,mem:128,port:256,chipset:32768,keyboard:65536,key:131072,video:262144,fdc:524288,disk:2097152,serial:8388608,speaker:33554432,computer:67108864,log:536870912,warn:1073741824,halt:-2147483648};m=Jd.prototype;
m.Ba=function(a,b,c,d){this.D=b;this.b=c;this.u=a;(a=oc(a,"messages"))&&Nd(this,a);this.Cb=Sd;Ud(this,function(a){a:{var b=d.b.la,c=a[0],g=a=0,k=b.length;if(c){a=X(Y(d,c));if(-1===a){d.g("invalid address: "+c);break a}g=a>>>d.b.Z;k=1}d.g("blockid physical blockaddr used size type");d.g("-------- --------- ---------- ------ ------ ----");for(var c=-1,l=0;k--;){var n=b[g];n.type==c?l++||d.g("..."):(c=n.type,l=Vb[c],n&&d.g(q(n.id)+" %"+q(g<<d.b.Z)+" %%"+q(n.B)+" "+r(n.kb)+" "+r(n.size)+
" "+l),c!=Pb&&(c=-1),l=0);a+=d.b.ma;g++}}});B(this)};
m.pa=function(a,b,c){var d=this;switch(b){case "debugInput":return this.Ca=this.T[b]=c,c.onkeydown=function(a){var b;if(13==a.keyCode)b=c.value,c.value="",rc(d,b,!0);else if(27==a.keyCode)c.value=b="";else if(38==a.keyCode?d.H<d.F.length-1&&(b=d.F[++d.H]):40==a.keyCode&&(0<d.H?b=d.F[--d.H]:(b="",d.H=-1)),null!=b){var h=b.length;c.value=b;c.setSelectionRange(h,h)}null!=b&&a.preventDefault&&a.preventDefault()},!0;case "debugEnter":return this.T[b]=c,Ba(c,function(){if(d.Ca){var a=d.Ca.value;d.Ca.value=
"";rc(d,a,!0);return!0}return!1}),!0;case "step":return this.T[b]=c,Ba(c,function(a){var b=!1;jb(d,!0)||(ib(d,!0),b=d.Ya(a?1:0),ib(d,!1));return b}),!0}return!1};m.jb=function(){this.Ca&&this.Ca.focus()};function X(a){a=a&&a.B;null==a&&(a=-1);return a}m.V=function(a,b){var c=255,d=X(a);-1!==d&&(c=vb(this.D,d),b&&Vd(a,b));return c};m.mb=function(a,b){var c=65535,d=X(a);if(-1!==d){var c=this.D,e=d&c.F,f=(d&c.H)>>>c.Z,c=e!=c.F?c.D[f].yb(e,d):c.D[f++].ib(e,d)|c.D[f&c.W].ib(0,d+1)<<8;b&&Vd(a,b)}return c};
m.Ab=function(a,b,c){var d=X(a);-1!==d&&(wb(this.D,d,b),c&&Vd(a,c),sc(this.b,!0))};m.Ub=function(a,b,c){var d=X(a);if(-1!==d){var e=this.D,f=d&e.F,h=(d&e.H)>>>e.Z;f!=e.F?e.D[h].zb(f,b&65535,d):(e.D[h++].lb(f,b&255,d),e.D[h&e.W].lb(0,b>>8&255,d+1));c&&Vd(a,c);sc(this.b,!0)}};function W(a){return{B:a,va:!1}}function Wd(a){return[a.B,a.va]}function Xd(a){return{B:a[0],va:a[1]}}
function Y(a,b,c){var d;c=(c?a.Y:a.Fb).B;if(void 0!==b){d=b=Yd(a,b);var e;if(d.match(/^[a-z_][a-z0-9_]*$/i))for(d=d.toUpperCase(),c=0;c<a.J.length;c++){var f=a.J[c].ya[d];if(void 0!==f){d=f.o;void 0!==d&&(e=W(d));break}}if(d=e)return d;c=Zd(a,b,void 0)}null!=c&&(d=W(c));return d}function $d(a,b,c){c&&(c=c.match(/(['"])(.*?)\1/))&&(b.Vb=ae(a,b.Sb=c[2]))}function Vd(a,b){null!=a.B&&(a.B+=b||1)}function Z(a){return q(a,4)}
function be(a,b,c){var d="";for(c=c||256;d.length<c;){var e=a.V(b,1);if(!e||36==e||127<=e)break;d+=32<=e?String.fromCharCode(e):"."}return d}function Nd(a,b){a.C=a;a.fa=a.Wb=1073741824;a.Ea=null;var c=ae(a,b.replace("keys","key").replace("kbd","keyboard"),!1,"|");if(c.length)for(var d in Td)0<=la(c,d)&&(a.fa|=Td[d],a.g(d+" messages enabled"))}function Ud(a,b){for(var c in Td)if(64==Td[c]){a.$a[c]=b;break}}
function ce(a,b){var c;a=a.toUpperCase();null==b?c=la(Rd,a):(c=la(Rd,a.substr(b,3)),0>c&&(c=la(Rd,a.substr(b,2))));return c}function de(a,b){var c=0,d=ee(a,b);if(void 0!==d)switch(b){case 7:case 0:case 1:case 2:case 3:case 4:case 5:case 6:c=2;break;case 8:case 9:case 10:case 11:case 12:case 13:c=4}return c?q(d,c):"??"}
function ee(a,b){var c;if(0<=b){var d=a.b;switch(b){case 7:c=d.j;break;case 0:c=d.M;break;case 1:c=d.N;break;case 8:c=Hc(d);break;case 2:c=d.O;break;case 3:c=d.P;break;case 9:c=Jc(d);break;case 4:c=d.R;break;case 5:c=d.S;break;case 10:c=J(d);break;case 6:c=d.V(J(d));break;case 11:c=d.ca;break;case 12:c=d.K;break;case 13:c=d.j<<8|Gc(d)&255}}return c}
function fe(a,b){b=Yd(a,b);for(var c=0,d,e;0<=(c=b.indexOf("@",c));)e=ce(b,c+1),0<=e&&(b=b.substr(0,c)+de(a,e)+b.substr(c+1+Rd[e].length)),c++;for(c=0;0<=(c=b.indexOf("#",c));)e=b.substr(c+1,2),d=aa(e,16),null!=d&&32<=d&&128>d?(d=e+" '"+String.fromCharCode(d)+"'",b=b.replace("#"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("$",c));)e=b.substr(c+1,9),(d=Y(a,e))?(d=e+' "'+be(a,d)+'"',b=b.replace("$"+e,d),c+=d.length):c++;for(c=0;0<=(c=b.indexOf("^",c));)e=b.substr(c+1,9),(d=Y(a,e))?(Vd(d),d=e+' "'+
be(a,d,11)+'"',b=b.replace("^"+e,d),c+=d.length):c++;return b}m.message=function(a,b){b&&(a+=" at "+Z(W(this.b.K).B));if(!this.Ea||a!=this.Ea)if(this.Ea=a,this.fa&-2147483648&&(this.da(),a+=" (cpu halted)"),this.g(a),this.b){var c=this.b;c.i.Wa=0;c.F-=c.b;c.b=0;sc(c)}};function gb(a,b,c,d,e,f,h,g){g|=256;null!=f&&(a.fa&g)!=g||a.message(b.ab+"."+(null!=d?"outPort":"inPort")+"("+r(c)+","+(f?f:"unknown")+(null!=d?",0x"+q(d,2):"")+")"+(null!=h?": 0x"+q(h,2):"")+(null!=e?" at "+Z(e):""))}
function Md(a){var b;if(qd(a)){if(!a.W||!a.W.length){a.W=Array(1E3);for(b=0;b<a.W.length;b++)a.W[b]=W();a.ua=0;a.g("instruction history buffer allocated")}if(!a.L||!a.L.length)for(a.L=Array(256),b=0;b<a.L.length;b++)a.L[b]=[b,0]}else a.W&&a.W.length&&a.g("instruction history buffer freed"),a.ua=0,a.W=[],a.L=[]}m.La=function(a){if(!ge(this))return!1;this.b.La(a);return!0};
m.Ya=function(a,b,c){if(!ge(this))return!1;this.U=0;a||qd(this)&&rd(this,this.b.K,0);try{var d=this.b.Ya(a);0<d&&(this.U+=d,xc(this.b,d,!0),uc(this.b,d),this.ja++)}catch(e){"number"!=typeof e&&(this.U=0,lb(this.b,e.stack||e.message))}!1!==c&&sc(this.b);this.sa(b||!1);return 0<this.U};m.da=function(a){this.b&&this.b.da(a)};m.sa=function(a){void 0===a&&(a=!0);this.Y=W(this.b.K);a&&1!=this.ea?he(this):ie(this)};
function ge(a){var b;if(b=a.b&&kb(a.b))b=a.b,b.w.ga?b=!0:(b.g(b.toString()+" not powered"),b=!1);b&&!jb(a.b)?(a=a.b,a.w.Pa?(a.g(a.toString()+" error"),a=!0):a=!1,a=!a):a=!1;return a}m.xa=function(a,b){return!b&&(this.reset(!0),a&&this.restore&&!this.restore(a))?!1:!0};m.wa=function(a,b){b&&this.g(a?"suspending":"shutting down");return a?this.save():!0};m.reset=function(a){Md(this);this.ja=this.Ma=0;this.Ea=null;this.U=0;this.Y=W(this.b.K);this.w.ia=!1;je(this);a||this.sa()};
m.save=function(){var a=new H(this);I(a,0,Wd(this.Y));I(a,1,Wd(this.ka));I(a,2,[this.F,this.qa,this.fa]);I(a,3,this.J);return a.data()};m.restore=function(a){var b=0;void 0!==a[2]&&(this.Y=Xd(a[b++]),this.ka=Xd(a[b++]),this.F=a[b][0],"string"==typeof this.F&&(this.F=[this.F]),this.qa=a[b][1],this.fa|=a[b][2]);a[3]&&(this.J=a[3]);return!0};m.start=function(a,b){this.ea||this.g("running");this.w.ia=!0;this.$b=a;this.ec=b};
m.stop=function(a,b){if(this.w.ia){this.w.ia=!1;this.U=b-this.ec;if(!this.ea){var c="stopped";if(this.U){var d=a-this.$b,e=0<d?Math.round(1E3*this.U/d):0,c=c+" (";qd(this)&&(c+=this.ja+" opcodes, ",this.Ma-=this.ja,this.ja=0);c+=this.U+" cycles, "+d+" ms, "+e+" hz)"}else hb(this,-2147483648)&&(c+=" (use the 't' command to execute blocked faults)");this.g(c)}this.sa(!0);this.jb();je(this,this.b.K)}};function qd(a){return 1<a.A.length||!!a.Da}
function rd(a,b,c){var d=a.b;if(0<c&&(a.Da&&!--a.Da||Zb(a,b,1,a.A)))return!0;0<=c&&a.L.length&&(a.ja++,b=vb(a.D,b),null!=b&&(a.L[b][1]++,b=a.W[a.ua],b.B=d.K,b.va=!1,++a.ua==a.W.length&&(a.ua=0)));return!1}function Hb(a,b,c){a.g("break on input from port "+r(b)+": "+q(c));a.da(!0)}function Kb(a,b,c){a.g("break on output to port "+r(b)+": "+q(c));a.da(!0)}
function Ld(a){var b,c;a.A=["bp"];if(void 0!==a.ba)for(b=1;b<a.ba.length;b++){c=a.ba[b];var d=a.b;$b(d.la[X(c)>>>d.Z],!1)}a.ba=["br"];if(void 0!==a.I)for(b=1;b<a.I.length;b++)c=a.I[b],d=a.b,$b(d.la[X(c)>>>d.Z],!0);a.I=["bw"];a.Kb=0}m.Fa=function(a,b,c){var d=!0;c||ke(this,a,b,!1,!0);if(a!=this.A){var e=X(b);if(-1===e)this.g("invalid address: "+Z(b.B)),d=!1;else{var f=this.b;f.la[e>>>f.Z].Fa(e&f.H,a==this.I)}}d&&(a.push(b),c?b.va=!0:(le(this,a,a.length-1,"set"),Md(this)));return d};
function ke(a,b,c,d,e){var f=!1;c=X(c);for(var h=1;h<b.length;h++){var g=b[h];if(c==X(g)&&(!d||g.va)){f=!0;g.va||e||le(a,b,h,"cleared");b.splice(h,1);b!=a.A&&(d=a.b,$b(d.la[c>>>d.Z],b==a.I));g.va||Md(a);break}}return f}function me(a,b){for(var c=1;c<b.length;c++)le(a,b,c);return b.length-1}function le(a,b,c,d){c=b[c];a.g(b[0]+" "+Z(c.B)+(d?" "+d:c.Sb?' "'+c.Sb+'"':""))}
function je(a,b){if(void 0!==b)Zb(a,b,1,a.A,!0),a.ea=0;else for(var c=1;c<a.A.length;c++){var d=a.A[c];if(d.va){if(!ke(a,a.A,d,!0))break;c=0}}}
function Zb(a,b,c,d,e){var f=!1;if(!a.Kb++)for(var h=1;!f&&h<d.length;h++){var g=d[h];if(!e||g.va)for(var k=X(g),l=0;l<c;l++)if(b+l==k){var n,f=!0;g.va&&(ke(a,d,g,!0),e=!0);if(n=g.Vb){for(var f=!1,p=0;p<n.length;p++)if(!ne(a,n[p],!0)){if(n[p].indexOf("if")){f=!0;break}for(var z=p+1;z<n.length&&n[z].indexOf("else");z++)p++;if(z==n.length){f=!0;break}}a.b.w.ia||(f=!0)}if(f){e||le(a,d,h,"hit");break}}}a.Kb--;return f}
function oe(a,b,c,d){for(var e=W(b.B),f=a.V(b,1),h=a.Cb[f],g="",k=(8086!=a.aa?Pd:Qd)[h[0]],l=h.length-1,n=0,p,z=1;z<=l;z++){var D="";p=h[z];if(void 0!==p&&!(p&16384&&a.aa==Kd)){var v=p&240;if(v){var Da=p&15;Da?n=Da:p|=n;p&61440||(p|=1==z?8192:4096);if(v&32)a:{var D=a,v=p,Da=b,E=" ";switch(v&15){case 1:E=q(D.V(Da,1),2);break;case 2:E=q(D.V(Da,1)<<24>>24,4);break;case 3:E=q(D.mb(Da,2),4);break;default:D="imm("+r(v)+")";break a}8086==D.aa&&v&64?E="["+E+"]":v&16||(E=(D.aa==Kd?"$":"0x")+E);D=E}else v&
16?(D=(p&3840)>>8,v=Rd[D],8086==a.aa&&p&64&&(6==D&&(v="HL"),v="["+v+"]"),D=v):v&128&&(D=(f>>3&7).toString());if(!D||!D.length){g="INVALID";break}0<g.length&&(g+=",");g+=D||"???"}}}f="";h=Z(e.B)+" ";if(-1!==e.B&&-1!==b.B){do if(f+=q(a.V(e,1),2),null==e.B)break;while(e.B!=b.B)}h+=ga(f,10);h=h+(p&32768?"*":" ")+ga(k,7);g&&(h+=" "+g);c&&(h=ga(h,40)+";"+c,h=a.b.w.Oa?h+("cycles="+vc(a.b).toString()+" cs="+q(a.b.i.bb)):h+(null!=d?"="+d.toString():""));return h}
function Ne(a,b){var c;switch(b){case "I":c=a.b.oa&512;break;case "S":c=Pc(a.b);break;case "Z":c=Oc(a.b);break;case "A":c=Nc(a.b);break;case "P":c=Mc(a.b);break;case "C":c=Lc(a.b);break;default:c=0}return b+(c?"1":"0")+" "}function Oe(a,b){return Rd[b]+"="+de(a,b)+" "}function Pe(a){return Oe(a,7)+Oe(a,8)+Oe(a,9)+Oe(a,10)+Oe(a,11)+Ne(a,"I")+Ne(a,"S")+Ne(a,"Z")+Ne(a,"A")+Ne(a,"P")+Ne(a,"C")}
var Qe={"||":0,"&&":1,"|":2,"^":3,"&":4,"!=":5,"==":5,">=":6,">":6,"<=":6,"<":6,">>>":7,">>":7,"<<":7,"-":8,"+":8,"%":9,"/":9,"*":9};
function Re(a,b,c){for(c=c||-1;c--&&b.length;){var d=b.pop();if(2>a.length)return!1;var e=a.pop(),f=a.pop();switch(d){case "*":d=f*e;break;case "/":if(!e)return!1;d=f/e;break;case "%":if(!e)return!1;d=f%e;break;case "+":d=f+e;break;case "-":d=f-e;break;case "<<":d=f<<e;break;case ">>":d=f>>e;break;case ">>>":d=f>>>e;break;case "<":d=f<e?1:0;break;case "<=":d=f<=e?1:0;break;case ">":d=f>e?1:0;break;case ">=":d=f>=e?1:0;break;case "==":d=f==e?1:0;break;case "!=":d=f!=e?1:0;break;case "&":d=f&e;break;
case "^":d=f^e;break;case "|":d=f|e;break;case "&&":d=f&&e?1:0;break;case "||":d=f||e?1:0;break;default:return!1}a.push(d|0)}return!0}
function Zd(a,b,c){var d;if(b){b=Yd(a,b);for(var e=0,f=!1,h=b,g=[],k=[],l=b.split(/(\|\||&&|\||^|&|!=|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*)/);e<l.length;){var n=l[e++],p=n.length,n=ha(n);if(!n){f=!0;break}n=Se(a,n,null,!1===c);if(void 0===n){f=!0;c=!1;break}g.push(n);if(e==l.length)break;var n=l[e++],z=n.length;k.length&&Qe[n]<Qe[k[k.length-1]]&&Re(g,k,1);k.push(n);b=b.substr(p+z)}Re(g,k)&&1==g.length||(f=!0);f?c&&a.g("error parsing '"+h+"' at character "+(h.length-b.length)):(d=g.pop(),c&&Te(a,null,
d))}return d}function Yd(a,b){for(var c;(c=b.match(/\{(.*?)}/))&&!(0<=c[1].indexOf("{"));){var d=Zd(a,c[1]);b=b.replace("{"+c[1]+"}",null!=d?q(d):"undefined")}for(;(c=b.match(/\[(.*?)]/))&&!(0<=c[1].indexOf("["));)d=Y(a,c[1]),b=b.replace("["+c[1]+"]",d?q(a.mb(d,0),4):"undefined");for(c=b;d=c.match(/\$([a-z]+)/i);){var e=null;switch(d[1].toLowerCase()){case "ops":e=a.ja-a.Ma}if(null==e)break;c=c.replace(d[0],e.toString())}return c}
function Se(a,b,c,d){var e;void 0!==b?(e=ce(b),0<=e?e=ee(a,e):(e=a.ta[b],void 0===e&&(e=aa(b))),void 0!==e||d||a.g("invalid "+(c?c:"value")+": "+b)):d||a.g("missing "+(c||"value"));return e}
function Te(a,b,c){var d,e=!1;if(void 0!==c){e=!0;d=c;var f,h="";if(!f||4<f)f=4;for(var g=0;g<f;g++){h&&(h=","+h);var k=d&255,l=8,n="";void 0===l?l=32:32<l&&(l=32);if(null==k||isNaN(k))for(;0<l--;)n="?"+n;else for(;0<l--;)n=(k&1?"1":"0")+n,k>>=1;h=n+"b"+h;d>>=8}d="0x"+q(c)+" "+c+". ("+h+")"}a.g((null!=b?b+": ":"")+d);return e}function Ue(a,b){if(b)return Te(a,b,a.ta[b]);var c=0;for(b in a.ta)Te(a,b,a.ta[b]),c++;return 0<c}Jd.prototype.Eb=function(a,b){return a[0]>b[0]?1:a[0]<b[0]?-1:0};
function Ve(a,b,c){var d=[],e=X(b)>>>0;for(b=0;b<a.J.length;b++){var f=a.J[b],h=f.B>>>0,g=f.gc;if(e>=h&&e<h+g){e=ia(f.Bb,[e-h],a.Eb);0<=e?We(a,b,e,d):c&&(e=~e,We(a,b,e-1,d),We(a,b,e,d));break}}return d}function We(a,b,c,d){var e={},f=a.J[b].Bb,h=0,g=null;0<=c&&c<f.length&&(h=f[c][0],g=f[c][1]);g&&(e=a.J[b].ya[g],g="."==g.charAt(0)?null:e.l||g);d.push(g);d.push(h);d.push(e.a);d.push(e.c)}
function Xe(a,b){if("?"==b)a.g("frequency commands:"),a.g("\tclear\tclear all frequency counts");else{var c,d=0;if(a.L)if("clear"==b){for(c=0;c<a.L.length;c++)a.L[c]=[c,0];a.g("frequency data cleared");d++}else if(void 0!==b)a.g("unknown frequency command: "+b),d++;else{var e=a.L.slice();e.sort(function(a,b){return b[1]-a[1]});var f=8086!=a.aa?Pd:Qd;for(c=0;c<e.length;c++){var h=e[c][0],g=e[c][1];g&&(a.g((f[a.Cb[h][0]]+" ").substr(0,5)+" ("+("0x"+q(h,2))+"): "+g+" times"),d++)}}d||a.g("no frequency data available")}}
function Ye(a,b){var c=b.match(/^\s*([A-Z_]?[A-Z0-9_]*)\s*(=?)\s*(.*)$/i);if(c){if(!c[1])return Ue(a)||a.g("no variables"),!0;if(!c[2])return Ue(a,c[1]);if(!c[3])return delete a.ta[c[1]],!0;var d=Zd(a,c[3]);return void 0!==d?(a.ta[c[1]]=d,!0):!1}a.g("invalid assignment:"+b);return!1}
function Ze(a,b,c){var d=null;if(b=Y(a,b,!0)){var e=Ve(a,b,!0);if(e.length){var f,h;e[0]&&(h="",(f=b.B-e[1])&&(h=" + "+r(f)),f=e[0]+" ("+Z(e[1])+")"+h,c&&a.g(f),d=f);4<e.length&&e[4]&&(h="",(f=e[5]-b.B)&&(h=" - "+r(f)),f=e[4]+" ("+Z(e[5])+")"+h,c&&a.g(f),d||(d=f))}else c&&a.g("no symbols")}return d}
function $e(a,b){switch(b[1]){case "8080":a.aa=Kd;break;case "8086":a.aa=8086;break;case "cs":var c;void 0!==b[3]&&(c=+b[3]);switch(b[2]){case "int":a.b.i.Ta=c;break;case "start":a.b.i.cb=c;break;case "stop":a.b.i.Va=c;break;default:a.g("unknown cs option");return}void 0!==c&&qc(a.b);a.g("checksums "+(a.b.w.Oa?"enabled":"disabled"));return;case "sp":void 0!==b[2]&&(wc(a.b,+b[2])||a.g("warning: using 1x multiplier, previous target not reached"));a.g("target speed: "+(a.b.i.Ha.toFixed(2)+"Mhz")+" ("+
a.b.i.Ja+"x)");return;case "?":a.g("debugger options:");a.g("\t8080\t\tselect 8080-style mnemonics");a.g("\t8086\t\tselect 8086-style mnemonics");a.g("\tcs int #\tset checksum cycle interval to #");a.g("\tcs start #\tset checksum cycle start count to #");a.g("\tcs stop #\tset checksum cycle stop count to #");a.g("\tsp #\t\tset speed multiplier to #");break;default:if(b[1]){a.g("unknown option: "+b[1]);return}}a.g(a.aa+"-style mnemonics enabled")}
function he(a,b){var c;if(b&&"?"==b[1])a.g("register commands:"),a.g("\tr\tdump registers"),a.g("\trx [#]\tset flag or register x to [#]");else{var d=a.b;null==c&&(c=!0);if(null!=b&&1<b.length){var e=b[1],f=null,h=e.indexOf("=");if(0<h)f=e.substr(h+1),e=e.substr(0,h);else if(2<b.length)f=b[2];else{a.g("missing value for "+b[1]);return}var h=!1,g=Zd(a,f);if(void 0!==g)switch(h=!0,e.toUpperCase()){case "A":d.j=g&255;break;case "B":d.M=g&255;break;case "BC":d.M=g>>8&255;case "C":d.N=g&255;break;case "D":d.O=
g&255;break;case "DE":d.O=g>>8&255;case "E":d.P=g&255;break;case "H":d.R=g&255;break;case "HL":d.R=g>>8&255;case "L":d.S=g&255;break;case "SP":d.ca=g&65535;break;case "PC":G(d,g);a.Y=W(d.K);break;case "PS":Ec(d,g);break;case "C":d.G=g?d.G|256:d.G&255;break;case "P":g?Mc(d)||(d.X^=1):Mc(d)&&(d.X^=1);break;case "A":d.ha=g?~d.X&16|d.ha&-17:d.X&16|d.ha&-17;break;case "Z":d.G=g?d.G&-256:d.G|255;break;case "S":g?Pc(d)||(d.X^=192):Pc(d)&&(d.X^=192);break;case "I":d.oa=g?d.oa|512:d.oa&-513;break;default:a.g("unknown register: "+
e);return}if(!h){a.g("invalid value: "+f);return}sc(d);a.g("updated registers:")}a.g(Pe(a));c&&(a.Y=W(d.K),ie(a,Z(a.Y.B)))}}function af(a,b){b=ha(b);var c=b.match(/^(['"])(.*?)\1$/);c?a.g(fe(a,c[2])):Zd(a,b,!0)}function bf(a,b,c){var d="t"!=b;c=Se(a,c,null,!0)||1;var e=1==c?0:1;"tc"==b&&(e=c,c=1);Aa(c,function(){return ib(a,!0)&&a.Ya(e,d,!1)},function(){sc(a.b);ib(a,!1)})}
function ie(a,b,c,d){if(b=Y(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c){d=Y(a,c,!0);if(!d||d.B<b.B)return;e=d.B-b.B;if(256<e){a.g("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=jb(a,!1)||a.ea?a.U:null;var h=null!=f?"cycles":null,g=Ve(a,b),k=b.B;if(g[0]&&d&&(!c&&d||0>g[0].indexOf("+"))){var l=g[0]+":";g[2]&&(l+=" "+g[2]);a.g(l)}g[3]&&(h=g[3],f=null);f=oe(a,b,h,f);a.g(f);a.Y=b;e-=b.B-k;c++}}}
function ae(a,b,c,d){if(c)if(b){0>a.H&&a.F.length&&(a.H=0);if(0>a.H||b!=a.F[a.H])a.F.splice(0,0,b),a.H=0;a.H--}else a.qa?b="end":b=a.F[a.H+1];a=[];if(b){b=b.toLowerCase().replace(/""/g,"'");c=0;var e=null;d=d||";";for(var f=0;f<=b.length;f++){var h=b.charAt(f);if('"'==h||"'"==h)e?h==e&&(e=null):e=h;else if(h==d&&!e||!h)a.push(ha(b.substring(c,f))),c=f+1}}return a}
function ne(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.g(">> "+b):(a.qa&&(a.g("ended assemble at "+Z(a.ka.B)),a.Y=a.ka,a.qa=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.Ea=null;if(kb(a)&&0<b.length){a.qa&&(b="a "+Z(a.ka.B)+" "+b);var f=b.replace(/ +/g," ").split(" ");if(f&&f.length)for(var h=f[0],g=h.charAt(0),k=1;k<h.length;k++){var l=h.charAt(k);if("?"==g||"r"==g||"a">l||"z"<l){f[0]=h.substr(k);f.unshift(h.substr(0,k));break}}switch(f[0].charAt(0)){case "a":var n=Y(a,f[1],!0);if(n)if(a.ka=
n,void 0===f[2])a.g("begin assemble at "+Z(n.B)),a.qa=!0,sc(a.b);else{var p;a.g("not supported yet");p=[];if(p.length){for(var z=0;z<p.length;z++)a.Ab(n,p[z],1);a.g(oe(a,a.ka))}}break;case "b":a:{var D=f[0],v=f[1],Da=b;if("?"==v)a.g("breakpoint commands:"),a.g("\tbi [p]\ttoggle break on input port [p]"),a.g("\tbo [p]\ttoggle break on output port [p]"),a.g("\tbp [a]\tset exec breakpoint at addr [a]"),a.g("\tbr [a]\tset read breakpoint at addr [a]"),a.g("\tbw [a]\tset write breakpoint at addr [a]"),
a.g("\tbc [a]\tclear breakpoint at addr [a]"),a.g("\tbl\tlist all breakpoints"),a.g("\tbn [n]\tbreak after [n] instruction(s)");else{var E=D.charAt(1);if("l"==E){var Ya=0,Ya=Ya+me(a,a.A),Ya=Ya+me(a,a.ba);(Ya+=me(a,a.I))||a.g("no breakpoints")}else if("n"==E)a.Da=Se(a,v),a.g("break after "+a.Da+" instruction(s)");else if(void 0===v)a.g("missing breakpoint address");else{var K=W();if("*"!=v&&(K=Y(a,v,!0),!K))break a;v=r(K.B);"c"==E?null==K.B?(Ld(a),a.g("all breakpoints cleared")):ke(a,a.A,K)||ke(a,
a.ba,K)||ke(a,a.I,K)||a.g("breakpoint missing: "+Z(K.B)):"i"==E?a.g("breakpoint "+(xb(a.D,K.B)?"enabled":"cleared")+": port "+v+" (input)"):"o"==E?a.g("breakpoint "+(Ib(a.D,K.B)?"enabled":"cleared")+": port "+v+" (output)"):null!=K.B&&($d(a,K,Da),"p"==E?a.Fa(a.A,K):"r"==E?a.Fa(a.ba,K):"w"==E?a.Fa(a.I,K):a.g("unknown breakpoint command: "+E))}}}break;case "c":a.ra&&(a.ra.value="");break;case "d":a:{var Za,$a=f[0],sa=f[1],Ia=f[2],yf=f[3];if("?"==sa){var ta="";for(Za in Td)a.$a[Za]&&(ta&&(ta+=","),ta+=
Za);ta+=",state,symbols";a.g("dump memory commands:");a.g("\tdb [a] [#] dump # bytes at address a");a.g("\tdw [a] [#] dump # words at address a");a.g("\tdd [a] [#] dump # dwords at address a");a.g("\tdh [#] [#] dump # instructions from history");ta.length&&a.g("dump extension commands:\n\t"+ta)}else if("state"==sa){var pe=cf(a.u,!0);"console"==Ia?console.log(pe):(a.ra&&(a.ra.value=""),a.g(pe))}else if("symbols"==sa)for(var Tc=0;Tc<a.J.length;Tc++){var Uc=a.J[Tc],bb;for(bb in Uc.ya)if("."!=
bb.charAt(0)){var qe=Uc.ya[bb].o;if(void 0!==qe){var re=Uc.ya[bb].l;re&&(bb=re);a.g(Z(qe)+" "+bb)}}}else{if("d"==$a){for(Za in Td)if(f[1]==Za){var se=a.$a[Za];se?(f.shift(),f.shift(),se(f)):a.g("no dump registered for "+sa);break a}sa||($a=a.fc||"db")}else a.fc=$a;if("dh"==$a){var te=sa,ue=Ia,ve="",we=0,S=a.ua,ua=a.W;if(ua.length){var V=+te||a.Lb,cb=+ue||10;isNaN(V)?V=cb:ve="more ";V>ua.length&&(a.g("note: only "+ua.length+" available"),V=ua.length);S-=V;0>S&&(null==ua[ua.length-1].B?(V=S+V,S=0):
S+=ua.length);var Vc=[];"call"==ue&&(cb=1E5,Vc=["CALL"]);for(void 0!==te&&a.g(V+" instructions earlier:");0<cb&&S!=a.ua;){var xe=ua[S++];if(null==xe.B)break;var yb=W(xe.B),zf=V--,ye=oe(a,yb,"history",zf);(!Vc.length||0<=ye.indexOf(Vc[0]))&&a.g(ye);yb.sb&&(S+=yb.sb,cb-=yb.sb,V-=yb.sb);S>=ua.length&&(S=0);a.Lb=V;we++;cb--}}we||(a.g("no "+ve+"history available"),a.Lb=void 0)}else{var dc=Y(a,sa);if(dc){var ec=0;Ia&&("l"==Ia.charAt(0)&&(Ia=Ia.substr(1)||yf),ec=Se(a,Ia)>>>0,65536<ec&&(ec=65536));for(var Ja=
"",fc="dd"==$a?4:"dw"==$a?2:1,gc=fc*ec||128,Af=gc+15>>4||1;Af--&&0<gc;){var hc=0,Wc=0,zb,Ab="",Xc="",sa=Z(dc.B);for(zb=16;0<zb&&0<gc;zb--){var ic=a.V(dc,1),hc=hc|ic<<(Wc++<<3);Wc==fc&&(Ab+=q(hc,2*fc),Ab+=1==fc?9==zb?"-":" ":" ",hc=Wc=0);Xc+=32<=ic&&128>ic?String.fromCharCode(ic):".";gc--}Ja&&(Ja+="\n");Ja+=sa+" "+Ab+(0==zb?" "+Xc:"")}Ja&&a.g(Ja);a.Fb=dc}}}}break;case "e":if("else"==f[0])break;var jc=1,ze=255,Ae=a.V,Be=a.Ab;"ew"==f[0]&&(jc=2,ze=65535,Ae=a.mb,Be=a.Ub);var Ce=jc<<1,De=f[1];if(null==
De)a.g("edit memory commands:"),a.g("\teb [a] [...] edit bytes at address a"),a.g("\tew [a] [...] edit words at address a");else{var kc=Y(a,De);if(kc)for(var lc=2;lc<f.length;lc++){var Bb=Zd(a,f[lc]);if(void 0===Bb){a.g("unrecognized value: "+f[lc]);break}Bb&~ze&&a.g("warning: "+q(Bb)+" exceeds "+jc+"-byte value");var Bf=Ae.call(a,kc);a.g("changing "+Z(kc.B)+" from 0x"+q(Bf,Ce)+" to 0x"+q(Bb,Ce));Be.call(a,kc,Bb,jc)}}break;case "f":Xe(a,f[1]);break;case "g":a:{var Ee=f[1],Cf=b;if(void 0!==Ee){var Yc=
Y(a,Ee,!0);if(!Yc)break a;$d(a,Yc,Cf);a.Fa(a.A,Yc,!0)}a.La(!0)||c||a.g("cpu busy or unavailable, run command ignored")}break;case "h":a:{var Zc;if(a.w.ia)Zc="halting",a.da();else{if(jb(a,!0))break a;Zc="already halted"}c||a.g(Zc)}break;case "i":if("if"==f[0]){var $c;var Cb=b.substr(2),Cb=ha(Cb);Zd(a,Cb)?(c||a.g("true: "+Cb),$c=!0):(c||a.g("false: "+Cb),$c=!1);$c||(d=!1);break}var ad=f[1];if(ad&&"?"!=ad){var bd=Se(a,ad);if(void 0!==bd){var Df=Gb(a.D,bd);a.g(r(bd)+": "+("0x"+q(Df,2)))}}else a.g("input commands:"),
a.g("\ti [p]\tread port [p]"),a.g("warning: port accesses can affect hardware state");break;case "k":var Ef=f[0];if("?"==f[1])a.g("stack trace commands:"),a.g("\tk\tshow frame addresses"),a.g("\tks\tshow symbol information");else{var cd=0,Fe=W(),Db=W(a.b.ca);for(a.g("stack trace for "+Z(Db.B));10>cd;){for(var Ka=null,Ff=256;65536>Db.B>>>0;){Fe.B=a.mb(Db,2);if(null==Db.B||!Ff--)break;for(var Gf=a,mc=Fe,Ge=null,Eb=mc.B,He=Eb,dd=1;6>=dd&&Eb;dd++){if(2<dd){mc.B=Eb;var nc=oe(Gf,mc);if(0<=nc.indexOf("CALL")){var Ie=
nc.indexOf(" ");if(Eb+(nc.indexOf(" ",Ie+1)-Ie-1)/2==He){Ge=nc;break}}}Eb--}mc.B=He;if(Ka=Ge)break}if(!Ka||null==Ka)break;var Je=null;if("ks"==Ef){var Ke=Ka.match(/[0-9A-F]+$/);Ke&&(Je=Ze(a,Ke[0]))}Ka=ga(Ka,50)+" ;"+(Je||"stack="+Z(Db.B));a.g(Ka);cd++}cd||a.g("no return addresses found")}break;case "l":if("ln"==f[0]){Ze(a,f[1],!0);break}break;case "m":a:{var va,wa=null,F=f[1];"?"==F&&(F=void 0);if(void 0!==F){var La=0;if("all"==F)La=1610481663,F=null;else if("on"==F)wa=!0,F=null;else if("off"==F)wa=
!1,F=null;else{"keys"==F&&(F="key");"kbd"==F&&(F="keyboard");for(va in Td)if(F==va){La=Td[va];wa=!!(a.fa&La);break}if(!La){a.g("unknown message category: "+F);break a}}La&&("on"==f[2]?(a.fa|=La,wa=!0):"off"==f[2]&&(a.fa&=~La,wa=!1))}var Hf=0,Ea="";for(va in Td)if(!F||F==va){var If=!!(a.fa&Td[va]);if(null===wa||wa==If)Ea&&(Ea+=","),++Hf%10||(Ea+="\n\t"),"key"==va&&(va="keys"),Ea+=va}void 0===F&&a.g("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.g((null!==wa?wa?"messages on: ":
"messages off: ":"message categories:\n\t")+(Ea||"none"));Md(a)}break;case "o":var ed=f[1],Jf=f[2];if(ed&&"?"!=ed){var fd=Se(a,ed,"port #"),gd=Se(a,Jf);void 0!==fd&&void 0!==gd&&(Jb(a.D,fd,gd),a.g(r(fd)+": "+("0x"+q(gd,2))))}else a.g("output commands:"),a.g("\to [p] [b]\twrite byte [b] to port [p]"),a.g("warning: port accesses can affect hardware state");break;case "p":if("print"==f[0]){af(a,b.substr(5));break}var Le="pr"==f[0]?1:0,Kf=1+Le;if(a.ea)a.g("step in progress");else{var hd=W(a.b.K);switch(a.V(hd)){case 205:a.ea=
Kf,Vd(hd,3)}a.ea?(a.Fa(a.A,hd,!0),a.La()||(a.u&&a.u.jb(),a.ea=0)):bf(a,Le?"tr":"t")}break;case "r":if("reset"==b){a.u&&a.u.reset();break}he(a,f);break;case "s":$e(a,f);break;case "t":bf(a,f[0],f[1]);break;case "u":ie(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Ye(a,b.substr(3))||(d=!1);break}a.g("PC8080 version 1.22.0 ("+a.b.Ra+",RELEASE"+(mb?",TYPEDARRAYS":",LONGARRAYS")+")");a.g(oa());break;case "?":if(f[1]){af(a,b.substr(1));break}var Fb="commands:",id;for(id in Od)Fb+="\n"+ga(id,7)+Od[id];qd(a)||
(Fb+="\nnote: frequency/history disabled if no exec breakpoints");a.g(Fb);break;default:a.g("unknown command: "+b),d=!1}}}catch(Me){a.g("debugger error: "+(Me.stack||Me.message)),d=!1}return d}function rc(a,b,c){b=ae(a,b,c);for(var d in b)if(!ne(a,b[d]))return!1;return!0}Ma(function(){for(var a=A(document,"pc8080","debugger"),b=0;b<a.length;b++){var c=a[b],d=y(c),d=new Jd(d);eb(d,c)}});function H(a,b,c){this.id=a.id;this.key=df(a,b,c);this.C=a.C;ef(this,a.Qb)}
function df(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
H.prototype={constructor:H,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){ef(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}}};
function ef(a,b){a[a.id]={};b&&I(a,"parms",b);a.b=!1}function ff(a){var b=!0;if(ra()){var c=JSON.stringify(a[a.id]);ya(a.key,c)||(t("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function gf(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){t(c.message||c),b=!1}return b}function hf(a,b){return b?(a[a.id]=b,a.b=!0):a.b?!0:ra()&&(b=xa(a.key))?(a[a.id]=b,a.b=!0):!1}function jf(a,b){return a[a.id][b]||null}function I(a,b,c){try{a[a.id][b]=c}catch(d){}}
function kf(a,b,c){u.call(this,"Computer",a,kf,67108864);this.w.ga=!1;lf(this,b);this.ba=oc(this,"autoPower",a);this.F=0;this.ta=a.busWidth||a.buswidth;this.u=mf;this.W=null;this.J=this.qa=!1;this.ua=oc(this,"url")||"";(Math.random()+.1).toString(36);this.A=nf(this);if(this.b=db("CPU",this.id)){this.C=db("Debugger",this.id);this.aa=[];for(b=null;b=pb(this,"Video",b);)this.aa.push(b);this.D=new rb({id:this.Hb+".bus",busWidth:this.ta},this.b,this.C);var d,e=ab(this.id);if((this.H=db("Panel",this.id))&&
this.H.ra)for(b=0;b<e.length;b++)d=e[b],d.na=this.H.na,d.g=this.H.g,d.ra=this.H.ra;for(b=0;b<e.length;b++)d=e[b],d.Ba&&d.Ba(this,this.D,this.b,this.C);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.U=d:this.u=parseInt(d,10));var f;if(a=oc(this,"state")||(f=!0,a.state))b=this.ea=a,f||(this.J=!0,this.u=mf),this.u&&(this.Y=new H(this,of),hf(this.Y)?b=null:delete this.Y);!b&&this.u&&(b=pf(this))&&(this.J=!0);if(b){var h=this;ma(b,null,!0,function(a,b,c){c?(h.U=null,h.J=!1,h.na("Unable to load machine state from server (error "+
c+(b?": "+ha(b):"")+")")):(h.W=b,h.qa=!0);B(h)})}else B(this);this.T.power||(this.ba=!0);!c&&this.ba&&qf(this,this.hb)}else t("Unable to find CPU component")}x(kf);var of="1.22.0",mf=0;function lf(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){t(d.message+" ("+c+")")}}a.L=b}
function oc(a,b,c){var d=b.toLowerCase(),d=Ra[b]||Ra[d];void 0===d&&a.L&&(d=a.L[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function qf(a,b,c){for(var d=ab(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!kb(f)){kb(f,function(){qf(a,b,c)});return}}b.call(a,c)}
function rf(a,b){var c=new H(a,of,"validate");if(hf(c)&&gf(c)){var d=jf(c,"timestamp"),e=b?jf(b,"timestamp"):"unknown";d!=e&&(a.na("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=kf.prototype;
m.hb=function(a){void 0===a&&(a=this.u||(this.W?1:mf));if(!this.F){this.F++;var b=!1,c=!1;this.ka=!1;var d=this.Y||new H(this,of);if(-1==a)b=!0;else if(a>mf){if(hf(d,this.W)){this.I=new H(this,of,"failsafe");hf(this.I)&&(sf(this,d),a=2,ef(this.I));I(this.I,"timestamp",ka());ff(this.I);var e=this.u&&!this.J;if(1==a||pa("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=gf(d)){var f=jf(d,"code"),h=jf(d,"data");f&&("ok"==f?hf(d,h):("error"==f&&"no machine state"!=
h?(this.na("Error: "+h),"unable to verify user"==h&&(ya("user",""),this.A=null)):this.g(f+": "+h),ef(d),hf(d)?(c=gf(d),e=!0):c=!1))}e&&rf(this,c?d:null)}else 2==a&&d.clear()}else rf(this);delete this.W;delete this.Y}e=ab(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.b&&(c=tf(this,h,d,b,c));b=[d,a,c];-1!=a?qf(this,this.Gb,b):this.Gb(b)}};
function tf(a,b,c,d,e){if(!b.w.ga){b.w.ga=!0;if(b.xa){var f=null;e&&((f=jf(c,b.id))||(f=jf(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.xa(f,d)&&f&&(t("Unable to restore state for "+b.type),a.ea&&!a.qa?(c.clear(),a.u=mf,window&&window.location.reload()):a.ka=!0,b.xa(null),e=!1)}if(!d&&b.Db)for(a=b.Db.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.Gb=function(a){var b=a[0],c=0>a[1];a=a[2];this.w.ga=!0;var d=this.T.power;d&&(d.textContent="Shutdown");this.ja||(this.g("PC8080 v"+of+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.ja=!0);this.b&&(tf(this,this.b,b,c,a),tc(this.b));this.ka&&(sf(this,b),b.clear());!c&&this.I&&(this.I.clear(),delete this.I);this.F=0};
function sf(a,b){if(pa("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.ua,d=a.A||"",e=b.toString(),f={app:"PC8080"};f.ver=of;f.url=c;f.user=d;f.type="bug";f.data=e;ma("http://www.pcjs.org/api/v1/report",f,!0)}}
function cf(a,b,c){var d,e="none";if(a.F)return null;a.F--;var f=new H(a,of),h=new H(a,of,"validate"),g=ka();I(h,"timestamp",g);I(f,"timestamp",g);I(f,"version","1.22.0");I(f,"url",window?window.location.href:null);I(f,"browser",oa());a.b&&a.b.wa&&(c&&a.b.da(),d=a.b.wa(b,c),"object"===typeof d&&I(f,a.b.id,d),c&&(a.b.w.ga=!1,!1===d&&(e=null)));for(var g=ab(a.id),k=0;k<g.length;k++){var l=g[k];l.w.ga&&(l.wa&&(d=l.wa(b,c),"object"===typeof d&&I(f,l.id,d)),c&&(l.w.ga=!1,!1===d&&(e=null)))}e&&(c?(g=d=
!1,b?(a.A&&uf(a,a.A,f.toString()),ff(h)&&ff(f)||(e=null,d=g=!0)):a.u&&(d=!0,g=3==a.u),d&&f.clear(g)):e=f.toString());c&&(a.w.ga=!1,b=a.T.power)&&(b.textContent="Power");a.F=0;return e}m.reset=function(){this.D&&this.D.reset&&(this.C&&hb(this,0)&&this.C.message("Resetting "+this.D.type,void 0),this.D.reset());for(var a=ab(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.D&&c.reset&&(this.C&&hb(this,0)&&this.C.message("Resetting "+c.type,void 0),c.reset())}};
m.start=function(a,b){for(var c=ab(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};m.stop=function(a,b){for(var c=ab(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
m.pa=function(a,b,c){var d=this;switch(b){case "power":return this.T[b]=c,c.onclick=function(){d.F||(d.w.ga?cf(d,!1,!0):qf(d,d.hb))},!0;case "reset":return this.T[b]=c,c.onclick=function(){if(d.w.ga&&!d.F)if(d.u&&!d.U){var a=pa("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");cf(d,a,!0);!a&&d.ea?window&&window.location.reload():d.hb(mf)}else d.reset(),d.b&&tc(d.b)},!0;case "save":if(da(na(),"pcjs.org")){c.parentNode.removeChild(c);
break}this.T[b]=c;c.onclick=function(){var a=nf(d,!0);if(a){var b=!!(d.u&&!d.U||d.ea),c=cf(d,b);b?uf(d,a,c):d.na("Resume disabled, machine state not saved")}};return!0}return!1};
function nf(a,b){var c=a.A;c||(c=xa("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=vf(a,c))||a.na("The user ID is invalid."))):b&&a.na("Browser local storage is not available"));return c}
function vf(a,b){a.A=null;var c=ma(na()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(ya("user",c.data),a.A=c.data)}catch(e){t(e.message+" ("+d+")")}return a.A}function pf(a){var b=null;a.A&&(b=na()+"/api/v1/user?req=load&user="+a.A+"&state="+df(a,of));return b}
function uf(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=df(a,of);d.data=c;b=ma(na()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.na("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.na(c),ya("user",""),a.A=null)}}
function pb(a,b,c){a=ab(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}m.jb=function(){};m.sa=function(a){this.b&&this.b.sa(a);this.H&&this.H.sa(a)};function zc(a,b){for(var c=0;c<a.aa.length;c++){var d=a.aa[c];b&1?(d=d.b,d.A=d.A&-8|10):(d=d.b,d.A=d.A&-8|9)}}
Ma(function(){for(var a=A(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=y(c),c=A(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=y(f),h=new kf(h,d,!0);eb(h,f);h.ba&&qf(h,h.hb)}});Ca.show.push(function(){for(var a=A(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=db("Computer",c.id))&&c.ja&&!c.w.ga&&c.hb(-1)}});
Ca.exit.push(function(){for(var a=A(document,"pc8080","computer"),b=0;b<a.length;b++){var c=y(a[b]);(c=db("Computer",c.id))&&c.w.ga&&cf(c,!(!c.u||c.U),!0)}});var wf=0;function xf(a,b,c,d,e,f){e("Loading "+a+"...");ma(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):Lf(g,a,b,c,d,e,f)})}
function Lf(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){Xa(c,b,a);var g=b;g&&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="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$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(p){g=null,a=p.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?Mf(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
function Mf(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");ma(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],l,n=/( [a-z]+=)(['"])(.*?)\2/g;l=n.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],h);Mf(a,b,c)}})}else c(a,null)}
function Nf(a,b,c,d){function e(a){if(void 0===g){var b=h&&A(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=fa(a))}function f(a){e("Error: "+a);k&&(--wf||Oa(!0));k=!1}var h,g,k=!0;wf++;Wa[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],p=document.createElement("style");p.type="text/css";p.styleSheet?p.styleSheet.cssText=l:p.appendChild(document.createTextNode(l));n.appendChild(p)}c||
(c="/versions/pc8080/1.22.0/components.xsl");l=function(d,g){g?xf(c,null,null,!1,e,function(d,l){if(l)if(Xa(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var k=g.transformNode(l);k?(h.outerHTML=k,--wf||Oa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(k=new XSLTProcessor,k.importStylesheet(l),(k=k.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(k,h),--wf||Oa(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?xf(b,a,d,!0,e,l):Lf(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(z){f(z.message)}return k}window.embedPC8080=function(a,b,c,d){Oa(!1);return Nf(a,b,c,d)};window.enableEvents=Oa;window.sendEvent=Pa;
function Of(a,b,c,d){if(!c&&b){d.push(b);a=Wa[d[0]];b=null;for(var e in a)if(da(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?ma(b,null,!0,function(a,b){Pf(b,d)}):Pf(null,d)}else t("Error ("+c+") requesting "+a)}
function Pf(a,b){var c,d,e,f=b[0],h=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var g=Wa[f],k={},l;for(l in g){var n=g[l],p=ca(l);if("xml"==p){for(p=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=p.exec(g[l]);){var z=d[2];z&&(g[z]||(n=n.replace(d[0],"")))}d=l=ba(l)}else"xsl"==p&&(e=l=ba(l));k[l]=n}a&&(k[l="css"]=a);b[2]&&(k[l="parms"]=b[2]);b[3]&&(k[l="state"]=b[3]);d&&e?(l=JSON.stringify(k),h+=".js",c=c[1]+"var resources="+l+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"&#xA9;"),l=h,g=null,k="data:application/javascript,",k=za("Firefox")?k+encodeURIComponent(c):k+encodeURI(c),l&&(g=document.createElement("a"),"string"!=typeof g.download&&(g=null)),g?(g.href=k,g.download=l,document.body.appendChild(g),g.click(),document.body.removeChild(g),c="Check your Downloads folder for "+l+"."):(window.open(k),c="Check your browser for a new window/tab containing the requested data"+(l?" ("+l+")":"")+"."),c+=', copy it to your web server as "'+h+'", and then add the following to your web page:\n\n',
c+='<div id="'+f+'"></div>\n',c+="...\n",c+='<script type="text/javascript" src="'+h+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",t(c)):t("Missing XML/XSL resources")}
window.savePC=function(a,b,c){var d=db("Computer",a),e=db("Debugger",a);if(d){var f=cf(d,!0),h=d.L?JSON.stringify(d.L):null;b||(b="/versions/pcjs/1.22.0/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,Qb:h}))return!0;ma(b,null,!0,function(c,d,e){Of(c,d,e,[a,ba(b,!0),h,f])});return!0}t("Unable to identify machine '"+a+"'");return!1};})();

View file

@ -0,0 +1,124 @@
(function(){var m;function aa(a){var b=16,c;if(a){b||(b=16);if("$"==a.charAt(0))b=16,a=a.substr(1);else if("0x"==a.substr(0,2))b=16,a=a.substr(2);else{var d=a.charAt(a.length-1).toLowerCase();"h"==d?(b=16,d=null):"."==d&&(b=10,d=null);null==d&&(a=a.substr(0,a.length-1))}var e,d=a,f=b;(f&&10!=f?16==f?null!==d.match(/^[0-9a-f]+$/i):2==f&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(e=parseInt(a,b))&&(c=e|0)}return c}
function n(a,b){var c="";void 0===b?b=8:8<b&&(b=8);if(null==a||isNaN(a))for(;0<b--;)c="?"+c;else for(;0<b--;){var d=a&15,d=d+(0<=d&&9>=d?48:55),c=String.fromCharCode(d)+c;a>>=4}return c}function ba(a,b){var c=a,d=a.lastIndexOf("/");0<=d&&(c=a.substr(d+1));d=c.indexOf("&");0<d&&(c=c.substr(0,d));b&&(d=c.lastIndexOf("."),0<d&&(c=c.substring(0,d)));return c}function ca(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}
function da(a,b){return-1!==a.indexOf(b,a.length-b.length)}var ea={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#039;"};function fa(a){return a.replace(/[&<>"']/g,function(a){return ea[a]})}var ga=Date.now||function(){return+new Date};function ha(){function a(a){return(10>a?"0":"")+a}var b=new Date;return b.getFullYear()+"-"+a(b.getMonth()+1)+"-"+a(b.getDate())+" "+a(b.getHours())+":"+a(b.getMinutes())+":"+a(b.getSeconds())}
function p(a,b,c,d){var e=0,f=null,h=null;if("object"==typeof resources&&(f=resources[a]))return d&&d(a,f,e),[f,e];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),h;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:")||(e=g.status||-1),d&&d(a,f,e))});if(b&&"object"==
typeof b){var k="",l;for(l in b)b.hasOwnProperty(l)&&(k&&(k+="&"),k+=l+"="+encodeURIComponent(b[l]));k=k.replace(/%20/g,"+");g.open("POST",a,!!c);g.setRequestHeader("Content-type","application/x-www-form-urlencoded");g.send(k)}else g.open("GET",a,!!c),"bytes"==b&&g.overrideMimeType("text/plain; charset=x-user-defined"),g.send();c||(f=g.responseText,200!=g.status&&(e=g.status||-1),d&&d(a,f,e),h=[f,e]);return h}function ia(){return"http://"+(window?window.location.host:"www.pcjs.org")}
function q(a){window&&window.alert(a)}function ja(a){var b=!1;window&&(b=window.confirm(a));return b}var ka=null;function la(){if(null==ka){var a=!1;if(window)try{window.localStorage.setItem("PCjs.localStorage","PCjs.localStorage"),a="PCjs.localStorage"==window.localStorage.getItem("PCjs.localStorage"),window.localStorage.removeItem("PCjs.localStorage")}catch(b){a=!1}ka=a}return ka}function ma(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
function na(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function oa(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)?!0:!1}return!1}var r={init:[],show:[],exit:[]},pa=!1,qa=!0;function ra(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function t(a){r.init.push(a)}
function sa(a){if(qa)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){q("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.")}}function ta(a){!qa&&a?(qa=!0,pa&&ua("init")):qa=a}function ua(a){r[a]&&sa(r[a])}ra("onload",function(){pa=!0;sa(r.init)});ra("onpageshow",function(){sa(r.show)});ra(oa("Opera")||oa("iOS")?"onunload":"onbeforeunload",function(){sa(r.exit)});
function v(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id;this.name=b.name;this.Ra=b.comment;this.bb=b;void 0===this.id&&(this.id="");b=this.id.indexOf(".");0<b?(this.Ta=this.id.substr(0,b),this.Sa=this.id.substr(b+1)):this.Sa=this.id;this[a]=c;this.g={ia:!1,ra:!1,Ja:!1,J:!1,ba:!1};this.Da=null;this.g.ba=!1;this.w={};this.I=null;w.push(this)}var va=void 0,wa={};
if(window){va||(va=window.location.search.substr(1));for(var xa,ya=/\+/g,za=/([^&=]+)=?([^&]*)/g;xa=za.exec(va);)wa[decodeURIComponent(xa[1].replace(ya," "))]=decodeURIComponent(xa[2].replace(ya," "))}function Aa(a){function b(){}if(window){if(!a)throw new TypeError;if(Object.create)return Object.create(a);var c=typeof a;if("object"!==c&&"function"!==c)throw new TypeError;}b.prototype=a;return new b}
function x(a,b){b||(b=v);a.prototype=Aa(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}var w=[],Ba={};function Ca(a,b,c){Ba[a]&&b&&(Ba[a][b]=c)}function y(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<w.length;b++){var d=w[b];a&&d.id.indexOf(a)||c.push(d)}return c}
function Da(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<w.length;d++)if(c)c==w[d]&&(c=null);else if(!(a!=w[d].type||b&&w[d].id.indexOf(b)))return w[d]}return null}function z(a){var b=null;if(a=a.getAttribute("data-value"))try{b=eval("("+a+")")}catch(c){q(c.message+" ("+a+")")}return b}
function Ea(a,b){for(var c=A(b.parentNode,"pc8080-control"),d=0;d<c.length;d++)for(var e=c[d].childNodes,f=0;f<e.length;f++){var h=e[f];if(1===h.nodeType){var g=h.getAttribute("class");if(g)for(var k=g.split(" "),l=0;l<k.length;l++)switch(g=k[l],g){case "pc8080-binding":(g=z(h))&&g.binding&&a.P(g.type,g.binding,h,g.value),l=k.length}}}}
function A(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}
v.prototype={constructor:v,parent:null,toString:function(){return this.name?this.name:this.id||this.type},P:function(a,b,c){switch(b){case "clear":return this.w[b]||(this.w[b]=c,c.onclick=function(a){return function(){a.w.print&&(a.w.print.value="")}}(this)),!0;case "print":return this.w[b]||(this.Y=this.w[b]=c,c.value="",this.O=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.K=function(a,b,c){this.O(a,"notice",c)}),!0;default:return!1}},log:function(){},O:function(){},status:function(a){this.O(this.Sa+": "+a)},K:function(a,b){b||q(a)},W:function(){return this.g.J=!0},V:function(a,b){b&&(this.g.J=!1);return!0}};function Fa(a,b){if(a.g.Ja)return a.g.ra&&(a.g.ra=!1),a.g.Ja=!1;if(a.g.ba)return a.O(a.toString()+" error"),!1;a.g.ra=b;return a.g.ra}function B(a){if(!a.g.ba&&(a.g.ia=!0,a.g.ia)){var b=a.Da;a.Da=null;b&&b()}}
function Ga(a,b){b&&(a.g.ia?b():a.Da=b);return a.g.ia}
var Ha="undefined"!==typeof ArrayBuffer,Ia=[1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,0,1,1,0,1,
0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1];function Ja(a){v.call(this,"Panel",a,Ja)}x(Ja);m=Ja.prototype;m.P=function(a,b,c,d){return this.o&&this.o.P(a,b,c,d)||this.a&&this.a.P(a,b,c,d)||this.b&&this.b.P(a,b,c,d)?!0:this.parent.P.call(this,a,b,c,d)};m.ca=function(a,b,c,d){this.o=a;this.A=b;this.a=c;this.I=d;this.b=Ka(a,"Keyboard")};m.W=function(a,b){b||La();return!0};m.V=function(){return!0};m.fa=function(){};
function La(){for(var a=!1,b=A(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=z(d),f;a:{f=e.id;if(void 0!==f)for(var h=void 0,h=0;h<w.length;h++)if(w[h].id===f){f=w[h];break a}f=null}f||(a=!0,f=new Ja(e));Ea(f,d);a&&B(f)}}t(La);
function Ma(a,b,c){v.call(this,"Bus",a,Ma);this.a=b;this.I=c;this.c=a.busWidth||16;this.m=Math.pow(2,this.c);this.h=this.m-1|0;this.G=16>=this.c?10:20>=this.c?12:24>=this.c?14:15;this.H=1<<this.G;this.o=this.H>>2;this.l=this.H-1;this.f=this.m/this.H|0;this.i=[];this.j=[];this.v=[];this.A=[];a=new C;Na(a,this.I);this.b=Array(this.f);for(b=0;b<this.f;b++)this.b[b]=a;a=this.a;b=this.b;c=this.G;var d=this.h;a.M=b;a.G=c;a.H=1<<a.G;a.S=a.H-1;a.Aa=b.length;a.pa=a.Aa-1;a.$=d;B(this)}x(Ma);
Ma.prototype.reset=function(){};Ma.prototype.W=function(a,b){b||this.reset();return!0};function Oa(a,b,c,d){for(var e=b>>>a.G;0<c&&e<a.b.length;){var f=a.b[e],h=e*a.H,g=a.H-(b-h);g>c&&(g=c);if(f&&f.size){if(f.type==d){if(b+c<=f.qa)return f.Ia+=f.qa-b,f.qa=b,!0;if(b>=f.qa+f.Ia){g=f.size-(b-h);g>c&&(g=c);f.Ia=b-f.qa+g;b=h+a.H;c-=g;e++;continue}}return Pa(1,b,c)}b=new C(b,g,a.H,d);Na(b,a.I,f);a.b[e++]=b;b=h+a.H;c-=g}return 0>=c?!0:Pa(2,b,c)}
Ma.prototype.B=function(a){return this.b[(a&this.h)>>>this.G].oa(a&this.l,a)};function Qa(a,b,c){a.b[(b&a.h)>>>a.G].eb(b&a.l,c&255,b)}function Pa(a,b,c){q("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Sa;if(Ha){var Ta=new ArrayBuffer(2);(new DataView(Ta)).setUint16(0,256,!0);Sa=256===(new Uint16Array(Ta))[0]}else Sa=!1;var Ua=Sa;
function C(a,b,c,d){this.id=Va+=2;this.a=null;this.qa=a;this.Ia=b;this.size=c||0;this.type=d||Wa;this.h=d==Xa;Na(this);this.Z=this.ib=!1;if(c)if(Ha)this.c=new ArrayBuffer(c),this.f=new DataView(this.c,0,c),this.b=new Uint8Array(this.c,0,c),this.l=new Uint16Array(this.c,0,c>>1),this.a=new Int32Array(this.c,0,c>>2),Ya(this,Ua?Za:$a);else{this.a=Array(c>>2);for(a=0;a<this.a.length;a++)this.a[a]=0;Ya(this,ab)}else Ya(this)}var Wa=0,Xa=2,Va=0;
C.prototype={constructor:C,parent:null,save:function(){var a,b;if(Ha)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.f.getInt32(b<<2,!0);else a=this.a;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(Ha)for(b=0;b<a.length;b++)this.f.setInt32(b<<2,a[b],!0);else this.a=a;return this.Z=!0}return!1},m:function(){return 255},o:function(){},w:function(a,b){return this.oa(a++,b++)|this.oa(a,b)<<8},v:function(a,b,c){this.za(a++,b&255,c++);this.za(a,b>>8,c)},G:function(a){return this.a[a>>
2]>>>((a&3)<<3)&255},S:function(a){var b=a>>2;a=(a&3)<<3;var c=this.a[b]>>a;return 24>a?c&65535:c&255|(this.a[b+1]&255)<<8},$:function(a,b){var c=a>>2,d=(a&3)<<3;this.a[c]=this.a[c]&~(255<<d)|b<<d;this.Z=!0},Aa:function(a,b){var c=a>>2,d=(a&3)<<3;24>d?this.a[c]=this.a[c]&~(65535<<d)|b<<d:(this.a[c]=this.a[c]&16777215|b<<24,c++,this.a[c]=this.a[c]&-256|b>>8);this.Z=!0},C:function(a,b){return this.D(a,b)},L:function(a,b){return this.M(a,b)},U:function(a,b,c){this.h||this.eb(a,b,c)},ga:function(a,b,
c){this.h||this.ha(a,b,c)},A:function(a){return this.b[a]},F:function(a){return this.b[a]},H:function(a){return this.f.getUint16(a,!0)},N:function(a){return a&1?this.b[a]|this.b[a+1]<<8:this.l[a>>1]},T:function(a,b){this.b[a]=b;this.Z=!0},X:function(a,b){this.b[a]=b;this.Z=!0},aa:function(a,b){this.f.setUint16(a,b,!0);this.Z=!0},pa:function(a,b){a&1?(this.b[a]=b,this.b[a+1]=b>>8):this.l[a>>1]=b;this.Z=!0}};function Na(a,b,c){a.I=b;a.i=a.j=0;c&&((a.i=c.i)&&bb(a,cb,!1),(a.j=c.j)&&db(a,cb,!1))}
function db(a,b,c){c&&a.j||(a.za=!a.h&&b[2]||a.o,a.ub=!a.h&&b[3]||a.v);if(c||void 0===c)a.eb=b[2]||a.o,a.ha=b[3]||a.v}function bb(a,b,c){c&&a.i||(a.oa=b[0]||a.m,a.tb=b[1]||a.w);if(c||void 0===c)a.D=b[0]||a.m,a.M=b[1]||a.w}function Ya(a,b){b||(b=eb);bb(a,b,void 0);db(a,b,void 0)}var eb=[],ab=[C.prototype.G,C.prototype.S,C.prototype.$,C.prototype.Aa],cb=[C.prototype.C,C.prototype.L,C.prototype.U,C.prototype.ga];
if(Ha)var $a=[C.prototype.A,C.prototype.H,C.prototype.T,C.prototype.aa],Za=[C.prototype.F,C.prototype.N,C.prototype.X,C.prototype.pa];
function fb(a,b){v.call(this,"CPU",a,fb);var c=a.cycles||b,d=a.multiplier||1;this.c={};this.c.na=c;this.c.Ha=0;this.c.ma=d;this.c.Ka=Math.round(this.c.na/1E4)/100;this.c.ja=this.c.Ka*this.c.ma;this.g.R=!1;this.g.Xa=!1;this.g.Va=a.autoStart;this.g.Wa=!1;this.g.Ba=!1;this.c.Fa=this.c.la=0;this.c.Ga=a.csStart;this.c.sa=a.csInterval;this.c.ta=a.csStop;this.fb=this.Na.bind(this);B(this)}x(fb);var gb=["power","reset"];m=fb.prototype;
m.ca=function(a,b,c,d){this.o=a;this.A=b;this.I=d;for(b=0;b<gb.length;b++)(c=this.w[gb[b]])&&this.o.P(null,gb[b],c);this.X=(b=Ka(a,"Video"))&&Math.max(b.X,b.gb)||60;this.ha=Ka(a,"ChipSet");a=hb(a,"autoStart");null!=a&&(this.g.Va="true"==a?!0:"false"==a?!1:!!a);B(this)};m.reset=function(){this.c.Ha=0};m.save=function(){return null};m.restore=function(){return!1};
m.W=function(a,b){if(!b){if(a&&this.restore){ib(this);if(!this.restore(a))return!1;jb(this)}else this.reset();this.O("No debugger detected")}kb(this);return!0};m.V=function(a){return a?this.save():!0};function lb(a){(a.g.Va||void 0===a.w.run)&&a.Na()}m.Ya=function(){return 0};function jb(a){void 0===a.c.Ga&&(a.c.Ga=0);void 0===a.c.sa&&(a.c.sa=-1);void 0===a.c.ta&&(a.c.ta=-1);a.g.Ba=0<=a.c.Ga&&0<a.c.sa;a.g.Ba&&(a.c.Fa=0,a.c.la=a.c.Ga-a.U)}
m.P=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.w[b]=c;a=!0;break;case "run":this.w[b]=c;c.onclick=function(){var a;if(a=d.o)if(a=d.o,a.g.J)a=!0;else{var b=null,c,g=y(a.id);for(c=0;c<g.length&&(b=g[c],b===a||b.g.ia);c++);if(c==g.length)for(c=0;c<g.length&&(b=g[c],b===a||b.g.J);c++);c==g.length&&(b=a);q("The "+b.type+" component ("+b.id+") is not "+(b.g.ia?"powered yet":"ready yet"+(b.Da?" (waiting for notification)":""))+".");a=!1}a&&(d.g.R?mb(d,!0):d.Na())};a=!0;break;
case "speed":this.w[b]=c;a=!0;break;case "setSpeed":this.w[b]=c,c.onclick=function(){nb(d,d.c.ma<<1)},c.textContent=this.c.ja.toFixed(2)+"Mhz",a=!0}return a};function ob(a,b,c){a.U+=b;c&&(a.T=a.a=0)}
function pb(a,b){var c=30;c<a.X&&(c=a.X);2>c&&(c=2);var d=1;b&&1<a.c.ma&&a.c.da&&(d=a.c.da/a.c.Ka);a.c.Za=Math.round(1E3/30);a.c.nb=Math.floor(a.c.na/c*d);a.c.La=Math.floor(a.c.na/30*d);a.c.ab=Math.floor(a.c.na/a.X*d);a.c.$a=Math.floor(a.c.na/2*d);b||(a.c.wa=a.c.La,a.c.va=a.c.ab,a.c.ua=a.c.$a);a.c.Ma=0}function qb(a){return a.U+a.N+a.T-a.a}function ib(a){a.c.da=0;a.U=a.N=a.T=a.a=0;jb(a);nb(a,1)}
function nb(a,b){if(void 0!==b){.8>a.c.da/a.c.ja&&(b=1);a.c.ma=b;var c=a.c.Ka*a.c.ma;if(a.c.ja!=c){a.c.ja=c;var c=a.c.ja.toFixed(2)+"Mhz",d=a.w.setSpeed;d&&(d.textContent=c);a.O("target speed: "+c)}}ob(a,a.N);a.N=0;a.c.ka=ga();a.c.ea=0;pb(a)}
m.Na=function(){if(Fa(this,!0)){if(!this.g.R){nb(this);this.o&&this.o.start(this.c.ka,qb(this));this.g.R=!0;this.g.Xa=!0;this.ha&&this.ha.start();var a=this.w.run;a&&(a.textContent="Halt");this.o&&this.o.fa(!0)}this.c.Ma>=this.c.na&&pb(this,!0);this.c.xa=0;this.c.Ea=ga();this.c.ea&&(a=this.c.Ea-this.c.ea,a>this.c.Za&&(this.c.ka+=a,this.c.ka>this.c.Ea&&(this.c.ka=this.c.Ea)));try{do{var b=this.g.Ba?1:this.c.nb;try{this.cb(b)}catch(e){if("number"!=typeof e)throw e;}var c=this.T-this.a;this.N+=c;this.c.xa+=
c;ob(this,0,!0);a=c;if(this.g.Ba){var d=!1;this.c.Fa=this.c.Fa+this.Ya()|0;this.c.la-=a;0>=this.c.la&&(this.c.la+=this.c.sa,d=!0);0<=this.c.ta&&this.c.ta<=qb(this)&&(this.c.sa=this.c.ta=-1,jb(this),mb(this),d=!0);d&&this.O(qb(this)+" cycles: checksum="+n(this.c.Fa))}this.c.va-=c;0>=this.c.va&&(this.c.va+=this.c.ab,this.o&&rb(this.o,this.c.Ha++),this.c.Ha>this.X&&(this.c.Ha=0));this.c.ua-=c;0>=this.c.ua&&(this.c.ua+=this.c.$a,this.o&&this.o.fa());this.c.wa-=c;if(0>=this.c.wa){this.c.wa+=this.c.La;
break}}while(this.g.R)}catch(e){mb(this);kb(this);this.o&&this.o.stop(ga(),qb(this));Fa(this,!1);b=e.stack||e.message;this.g.ba=!0;this.K(b);return}b=setTimeout;c=this.fb;this.c.ea=ga();a=this.c.Za;this.c.xa&&(a=Math.round(a*this.c.xa/this.c.La));a-=this.c.ea-this.c.Ea;if(d=this.c.ea-this.c.ka)this.c.da=Math.round(this.N/(10*d))/100,864E5<=d&&(this.U=0,nb(this));if(0>a||this.c.da<this.c.ja)a=0;this.c.Ma+=this.c.xa;this.c.ea+=a;b(c,a)}else kb(this),this.o&&this.o.stop(ga(),qb(this))};m.cb=function(){return 0};
function mb(a,b){a.g.ra&&(a.g.Ja=!0);a.T-=a.a;a.a=0;ob(a,a.N);a.N=0;if(a.g.R){a.g.R=!1;a.ha&&a.ha.stop();var c=a.w.run;c&&(c.textContent="Run")}a.g.Ca=b}function kb(a){a.o&&(rb(a.o,-1),a.o.fa(void 0))}function sb(a){this.aa=a.model||8080;fb.call(this,a,1E6);this.Oa=tb;ib(this);this.g.Ca=this.g.hb=!1;this.Qa=0;this.M=[];this.G=this.H=this.S=this.Aa=this.pa=this.$=0;this.ga=[];this.Pa=0;ub(this)}x(sb,fb);function vb(a,b){a.ga.push(b)}m=sb.prototype;
m.reset=function(){this.g.R&&mb(this);ub(this);ib(this);this.g.ba=!1;this.parent.reset.call(this)};function ub(a){a.b=0;a.h=0;a.s=0;a.i=0;a.u=0;a.j=0;a.l=0;a.C=0;D(a,a.Pa);wb(a,0);a.F=0}function xb(a,b){a.Pa=b;D(a,b)}m.Ya=function(){var a=this.b+this.h+this.s+this.i+this.u+this.j+this.l|0;return a=a+this.C+this.m+yb(this)|0};
m.save=function(){var a=new F(this);G(a,0,[this.b,this.h,this.s,this.i,this.u,this.j,this.l,this.C,this.m,yb(this)]);G(a,1,[this.F,this.U,this.c.ma]);for(var b=this.A,c=0,d=[],e=0;e<b.f;e++){var f=b.b[e];if(f.Z||f.ib){d[c++]=e;var h=c++;a:if(f=f.save()){for(var g=0,k=0,l=[];g<f.length;){for(var E=f[g],u=g+1;u<f.length&&f[u]===E;)u++;l[k++]=u-g;l[k++]=E;g=u}if(l.length<f.length){f=l;break a}}d[h]=f}}G(a,2,d);return a.data()};
m.restore=function(a){var b=a[0];this.b=b[0];this.h=b[1];this.s=b[2];this.i=b[3];this.u=b[4];this.j=b[5];this.l=b[6];this.C=b[7]&65535;D(this,b[8]);wb(this,b[9]);b=a[1];this.F=b[0];this.U=b[1];nb(this,b[3]);a:{b=this.A;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],e=a[c+1];if(e&&e.length<b.o){for(var f=0,h=Array(b.o),g=0;g<e.length-1;)for(var k=e[g++],l=e[g++];k--;)h[f++]=l;e=h}f=b.b[d];if(!f||!f.restore(e)){q("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
m.P=function(a,b,c){var d=!1;switch(b){case "A":case "B":case "C":case "BC":case "D":case "E":case "DE":case "H":case "L":case "HL":case "SP":case "PC":case "PS":case "SF":case "ZF":case "AF":case "PF":case "CF":this.w[b]=c;this.Qa++;d=!0;break;default:d=this.parent.P.call(this,a,b,c)}return d};function zb(a){return a.h<<8|a.s}function Ab(a,b){a.h=b>>8&255;a.s=b&255}function H(a){return a.i<<8|a.u}function Bb(a,b){a.i=b>>8&255;a.u=b&255}function I(a){return a.j<<8|a.l}
function J(a,b){a.j=b>>8&255;a.l=b&255}function D(a,b){a.m=b&65535}function K(a){return a.f&256?1:0}function Cb(a){return Ia[a.v&255]?4:0}function yb(a){return a.L&-214|(a.v&128?128:0)|(a.f&255?0:64)|((a.v^a.D)&16?16:0)|Cb(a)|K(a)}function wb(a,b){a.f=a.v=a.D=0;b&1&&(a.f|=256);b&4||(a.v|=1);b&16&&(a.D|=16);b&64||(a.f|=255);b&128&&(a.v^=192);a.L=a.L&-513|b&512|2}function L(a,b){a.D=a.b^b;return a.v=(a.f=a.b+b)&255}function M(a,b){a.D=a.b^b;return a.v=(a.f=a.b+b+(a.f&256?1:0))&255}
function N(a,b){a.f=a.v=a.D=a.b&b;(a.b|b)&8&&(a.D^=16);return a.f}function Db(a,b){a.D=b^255;b=a.v=b+255&255;a.f=a.f&-256|b;return b}function Eb(a,b){a.D=b;b=a.v=b+1&255;a.f=a.f&-256|b;return b}function O(a,b){return a.v=a.f=a.D=a.b|b}function P(a,b){b^=255;a.D=a.b^b;return a.v=(a.f=a.b+b+1^256)&255}function Q(a,b){b^=255;a.D=a.b^b;return a.v=(a.f=a.b+b+(a.f&256?0:1)^256)&255}function R(a,b){return a.v=a.f=a.D=a.b^b}m.B=function(a){return this.M[(a&this.$)>>>this.G].oa(a&this.S,a)};
function Fb(a,b){var c=b&a.S,d=(b&a.$)>>>a.G;if(c<a.S)return a.M[d].tb(c,b);c=a.M[d].oa(c,b);return c|=a.M[d+1&a.pa].oa(0,b+1)<<8}function S(a,b,c){a.M[(b&a.$)>>>a.G].za(b&a.S,c&255,b)}function Gb(a,b,c){var d=b&a.S,e=(b&a.$)>>>a.G;d<a.S?a.M[e].ub(d,c&65535,b):(a.M[e++].za(d,c&255,b),a.M[e&a.pa].za(0,c>>8&255,b+1))}function T(a){var b=a.B(a.m);D(a,a.m+1);return b}function U(a){var b=Fb(a,a.m);D(a,a.m+2);return b}function V(a){var b=Fb(a,a.C);a.C=a.C+2&65535;return b}
function W(a,b){a.C=a.C-2&65535;Gb(a,a.C,b)}function X(a,b,c,d){d=d||2;a.w[b]&&(void 0===c&&(a.g.ba=!0,a.K("Value for "+b+" is invalid"),mb(a)),c=!a.g.R||a.g.Wa?n(c,d):"--------".substr(0,d),a.w[b].textContent!=c&&(a.w[b].textContent=c))}
m.fa=function(a){this.Qa&&(a||!this.g.R||this.g.Wa)&&(X(this,"A",this.b),X(this,"B",this.h),X(this,"C",this.s),X(this,"BC",zb(this),4),X(this,"D",this.i),X(this,"E",this.u),X(this,"DE",H(this),4),X(this,"H",this.j),X(this,"L",this.l),X(this,"HL",I(this),4),X(this,"SP",this.C,4),X(this,"PC",this.m,4),a=yb(this),X(this,"PS",a,4),X(this,"SF",a&128,1),X(this,"ZF",a&64,1),X(this,"AF",a&16,1),X(this,"PF",a&4,1),X(this,"CF",a&1,1));if(a=this.w.speed)a.textContent=this.g.R&&this.c.da?this.c.da.toFixed(2)+
"Mhz":"Stopped"};m.cb=function(a){this.g.Ca=!0;this.g.hb=!1;this.g.Xa=!1;this.T=this.a=a;do{if(a=this.F)this.F&8&&this.L&512?(a=199|(this.F&7)<<3,this.F&=-16,this.L&=-513,this.Oa[a].call(this),a=!0):a=!1,a=!a;if(a&&this.F&16){this.a=0;break}this.Oa[T(this)].call(this)}while(0<this.a);return this.g.Ca?this.T-this.a:void 0===this.g.Ca?0:-1};t(function(){for(var a=A(document,"pc8080","cpu"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new sb(d);Ea(d,c)}});function Hb(){this.a-=4}
function Ib(){D(this,U(this));this.a-=10}function Jb(){D(this,V(this));this.a-=10}function Kb(){var a=U(this);W(this,this.m);D(this,a);this.a-=17}
var tb=[Hb,function(){Ab(this,U(this));this.a-=10},function(){S(this,zb(this),this.b);this.a-=7},function(){Ab(this,zb(this)+1);this.a-=5},function(){this.h=Eb(this,this.h);this.a-=5},function(){this.h=Db(this,this.h);this.a-=5},function(){this.h=T(this);this.a-=7},function(){var a=this.b<<1;this.b=a&255|a>>8;this.f=this.f&255|a&256;this.a-=4},Hb,function(){var a;J(this,a=I(this)+zb(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.B(zb(this));this.a-=7},function(){Ab(this,zb(this)-
1);this.a-=5},function(){this.s=Eb(this,this.s);this.a-=5},function(){this.s=Db(this,this.s);this.a-=5},function(){this.s=T(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(a|this.b)>>1;this.f=this.f&255|a;this.a-=4},Hb,function(){Bb(this,U(this));this.a-=10},function(){S(this,H(this),this.b);this.a-=7},function(){Bb(this,H(this)+1);this.a-=5},function(){this.i=Eb(this,this.i);this.a-=5},function(){this.i=Db(this,this.i);this.a-=5},function(){this.i=T(this);this.a-=7},function(){var a=this.b<<
1;this.b=a&255|this.f>>8;this.f=this.f&255|a&256;this.a-=4},Hb,function(){var a;J(this,a=I(this)+H(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.B(H(this));this.a-=7},function(){Bb(this,H(this)-1);this.a-=5},function(){this.u=Eb(this,this.u);this.a-=5},function(){this.u=Db(this,this.u);this.a-=5},function(){this.u=T(this);this.a-=7},function(){var a=this.b<<8&256;this.b=(this.f&256|this.b)>>1;this.f=this.f&255|a;this.a-=4},Hb,function(){J(this,U(this));this.a-=10},function(){Gb(this,
U(this),I(this));this.a-=16},function(){J(this,I(this)+1);this.a-=5},function(){this.j=Eb(this,this.j);this.a-=5},function(){this.j=Db(this,this.j);this.a-=5},function(){this.j=T(this);this.a-=7},function(){var a=0,b=K(this);if((this.v^this.D)&16||9<(this.b&15))a|=6;if(b||154<=this.b)a|=96,b=1;this.b=L(this,a);this.f=b?this.f|256:this.f&-257;this.a-=4},Hb,function(){var a;J(this,a=I(this)+I(this));this.f=this.f&255|a>>8&256;this.a-=10},function(){J(this,Fb(this,U(this)));this.a-=16},function(){J(this,
I(this)-1);this.a-=5},function(){this.l=Eb(this,this.l);this.a-=5},function(){this.l=Db(this,this.l);this.a-=5},function(){this.l=T(this);this.a-=7},function(){this.b=~this.b&255;this.a-=4},Hb,function(){this.C=U(this)&65535;this.a-=10},function(){S(this,U(this),this.b);this.a-=13},function(){this.C=this.C+1&65535;this.a-=5},function(){var a=I(this);S(this,a,Eb(this,this.B(a)));this.a-=10},function(){var a=I(this);S(this,a,Db(this,this.B(a)));this.a-=10},function(){S(this,I(this),T(this));this.a-=
10},function(){this.f|=256;this.a-=4},Hb,function(){var a;J(this,a=I(this)+this.C);this.f=this.f&255|a>>8&256;this.a-=10},function(){this.b=this.B(U(this));this.a-=13},function(){this.C=this.C-1&65535;this.a-=5},function(){this.b=Eb(this,this.b);this.a-=5},function(){this.b=Db(this,this.b);this.a-=5},function(){this.b=T(this);this.a-=7},function(){this.f=K(this)?this.f&-257:this.f|256;this.a-=4},function(){this.a-=5},function(){this.h=this.s;this.a-=5},function(){this.h=this.i;this.a-=5},function(){this.h=
this.u;this.a-=5},function(){this.h=this.j;this.a-=5},function(){this.h=this.l;this.a-=5},function(){this.h=this.B(I(this));this.a-=7},function(){this.h=this.b;this.a-=5},function(){this.s=this.h;this.a-=5},function(){this.a-=5},function(){this.s=this.i;this.a-=5},function(){this.s=this.u;this.a-=5},function(){this.s=this.j;this.a-=5},function(){this.s=this.l;this.a-=5},function(){this.s=this.B(I(this));this.a-=7},function(){this.s=this.b;this.a-=5},function(){this.i=this.h;this.a-=5},function(){this.i=
this.s;this.a-=5},function(){this.a-=5},function(){this.i=this.u;this.a-=5},function(){this.i=this.j;this.a-=5},function(){this.i=this.l;this.a-=5},function(){this.i=this.B(I(this));this.a-=7},function(){this.i=this.b;this.a-=5},function(){this.u=this.h;this.a-=5},function(){this.u=this.s;this.a-=5},function(){this.u=this.i;this.a-=5},function(){this.a-=5},function(){this.u=this.j;this.a-=5},function(){this.u=this.l;this.a-=5},function(){this.u=this.B(I(this));this.a-=7},function(){this.u=this.b;
this.a-=5},function(){this.j=this.h;this.a-=5},function(){this.j=this.s;this.a-=5},function(){this.j=this.i;this.a-=5},function(){this.j=this.u;this.a-=5},function(){this.a-=5},function(){this.j=this.l;this.a-=5},function(){this.j=this.B(I(this));this.a-=7},function(){this.j=this.b;this.a-=5},function(){this.l=this.h;this.a-=5},function(){this.l=this.s;this.a-=5},function(){this.l=this.i;this.a-=5},function(){this.l=this.u;this.a-=5},function(){this.l=this.j;this.a-=5},function(){this.a-=5},function(){this.l=
this.B(I(this));this.a-=7},function(){this.l=this.b;this.a-=5},function(){S(this,I(this),this.h);this.a-=7},function(){S(this,I(this),this.s);this.a-=7},function(){S(this,I(this),this.i);this.a-=7},function(){S(this,I(this),this.u);this.a-=7},function(){S(this,I(this),this.j);this.a-=7},function(){S(this,I(this),this.l);this.a-=7},function(){var a=this.m-1;if(this.ga.length)for(var b=0;b<this.ga.length;b++)if(this.ga[b](a))return;this.F|=16;this.a-=7;this.L&512||mb(this)},function(){S(this,I(this),
this.b);this.a-=7},function(){this.b=this.h;this.a-=5},function(){this.b=this.s;this.a-=5},function(){this.b=this.i;this.a-=5},function(){this.b=this.u;this.a-=5},function(){this.b=this.j;this.a-=5},function(){this.b=this.l;this.a-=5},function(){this.b=this.B(I(this));this.a-=7},function(){this.a-=5},function(){this.b=L(this,this.h);this.a-=4},function(){this.b=L(this,this.s);this.a-=4},function(){this.b=L(this,this.i);this.a-=4},function(){this.b=L(this,this.u);this.a-=4},function(){this.b=L(this,
this.j);this.a-=4},function(){this.b=L(this,this.l);this.a-=4},function(){this.b=L(this,this.B(I(this)));this.a-=7},function(){this.b=L(this,this.b);this.a-=4},function(){this.b=M(this,this.h);this.a-=4},function(){this.b=M(this,this.s);this.a-=4},function(){this.b=M(this,this.i);this.a-=4},function(){this.b=M(this,this.u);this.a-=4},function(){this.b=M(this,this.j);this.a-=4},function(){this.b=M(this,this.l);this.a-=4},function(){this.b=M(this,this.B(I(this)));this.a-=7},function(){this.b=M(this,
this.b);this.a-=4},function(){this.b=P(this,this.h);this.a-=4},function(){this.b=P(this,this.s);this.a-=4},function(){this.b=P(this,this.i);this.a-=4},function(){this.b=P(this,this.u);this.a-=4},function(){this.b=P(this,this.j);this.a-=4},function(){this.b=P(this,this.l);this.a-=4},function(){this.b=P(this,this.B(I(this)));this.a-=7},function(){this.b=P(this,this.b);this.a-=4},function(){this.b=Q(this,this.h);this.a-=4},function(){this.b=Q(this,this.s);this.a-=4},function(){this.b=Q(this,this.i);
this.a-=4},function(){this.b=Q(this,this.u);this.a-=4},function(){this.b=Q(this,this.j);this.a-=4},function(){this.b=Q(this,this.l);this.a-=4},function(){this.b=Q(this,this.B(I(this)));this.a-=7},function(){this.b=Q(this,this.b);this.a-=4},function(){this.b=N(this,this.h);this.a-=4},function(){this.b=N(this,this.s);this.a-=4},function(){this.b=N(this,this.i);this.a-=4},function(){this.b=N(this,this.u);this.a-=4},function(){this.b=N(this,this.j);this.a-=4},function(){this.b=N(this,this.l);this.a-=
4},function(){this.b=N(this,this.B(I(this)));this.a-=7},function(){this.b=N(this,this.b);this.a-=4},function(){this.b=R(this,this.h);this.a-=4},function(){this.b=R(this,this.s);this.a-=4},function(){this.b=R(this,this.i);this.a-=4},function(){this.b=R(this,this.u);this.a-=4},function(){this.b=R(this,this.j);this.a-=4},function(){this.b=R(this,this.l);this.a-=4},function(){this.b=R(this,this.B(I(this)));this.a-=7},function(){this.b=R(this,this.b);this.a-=4},function(){this.b=O(this,this.h);this.a-=
4},function(){this.b=O(this,this.s);this.a-=4},function(){this.b=O(this,this.i);this.a-=4},function(){this.b=O(this,this.u);this.a-=4},function(){this.b=O(this,this.j);this.a-=4},function(){this.b=O(this,this.l);this.a-=4},function(){this.b=O(this,this.B(I(this)));this.a-=7},function(){this.b=O(this,this.b);this.a-=4},function(){P(this,this.h);this.a-=4},function(){P(this,this.s);this.a-=4},function(){P(this,this.i);this.a-=4},function(){P(this,this.u);this.a-=4},function(){P(this,this.j);this.a-=
4},function(){P(this,this.l);this.a-=4},function(){P(this,this.B(I(this)));this.a-=7},function(){P(this,this.b);this.a-=4},function(){this.f&255&&(D(this,V(this)),this.a-=6);this.a-=5},function(){Ab(this,V(this));this.a-=10},function(){var a=U(this);this.f&255&&D(this,a);this.a-=10},Ib,function(){var a=U(this);this.f&255&&(W(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){W(this,zb(this));this.a-=11},function(){this.b=L(this,T(this));this.a-=7},function(){W(this,this.m);D(this,0);this.a-=
11},function(){this.f&255||(D(this,V(this)),this.a-=6);this.a-=5},Jb,function(){var a=U(this);this.f&255||D(this,a);this.a-=10},Ib,function(){var a=U(this);this.f&255||(W(this,this.m),D(this,a),this.a-=6);this.a-=11},Kb,function(){this.b=M(this,T(this));this.a-=7},function(){W(this,this.m);D(this,8);this.a-=11},function(){K(this)||(D(this,V(this)),this.a-=6);this.a-=5},function(){Bb(this,V(this));this.a-=10},function(){var a=U(this);K(this)||D(this,a);this.a-=10},function(){for(var a=T(this),b=this.A,
c=this.b,d=this.m+-2&65535,e=1,f=0;0<e;){var h=b.j[a],g=b.A[a]||1,k=1==g?255:2==g?65535:-1,k=(c>>>=f)&k;if(void 0!==h&&h[0])h[0](a,k,d);f+=g<<3;a+=g;e-=g}this.a-=10},function(){var a=U(this);K(this)||(W(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){W(this,H(this));this.a-=11},function(){this.b=P(this,T(this));this.a-=7},function(){W(this,this.m);D(this,16);this.a-=11},function(){K(this)&&(D(this,V(this)),this.a-=6);this.a-=5},Jb,function(){var a=U(this);K(this)&&D(this,a);this.a-=10},function(){for(var a=
T(this),b=this.A,c=this.m+-2&65535,d=1,e=0,f=0;0<d;){var h=b.i[a],g=b.v[a]||1,k=1==g?255:2==g?65535:-1,l=k;void 0!==h&&h[0]&&(l=h[0](a,c),void 0===l?l=k:l&=k);e|=l<<f;f+=g<<3;a+=g;d-=g}this.b=e&255;this.a-=10},function(){var a=U(this);K(this)&&(W(this,this.m),D(this,a),this.a-=6);this.a-=11},Kb,function(){this.b=Q(this,T(this));this.a-=7},function(){W(this,this.m);D(this,24);this.a-=11},function(){Cb(this)||(D(this,V(this)),this.a-=6);this.a-=5},function(){J(this,V(this));this.a-=10},function(){var a=
U(this);Cb(this)||D(this,a);this.a-=10},function(){var a=V(this);W(this,I(this));J(this,a);this.a-=18},function(){var a=U(this);Cb(this)||(W(this,this.m),D(this,a),this.a-=6);this.a-=11},function(){W(this,I(this));this.a-=11},function(){this.b=N(this,T(this));this.a-=7},function(){W(this,this.m);D(this,32);this.a-=11},function(){Cb(this)&&(D(this,V(this)),this.a-=6);this.a-=5},function(){D(this,I(this));this.a-=5},function(){var a=U(this);Cb(this)&&D(this,a);this.a-=10},function(){var a=I(this);J(this,
H(this));Bb(this,a);this.a-=5},function(){var a=U(this);Cb(this)&&(W(this,this.m),D(this,a),this.a-=6);this.a-=11},Kb,function(){this.b=R(this,T(this));this.a-=7},function(){W(this,this.m);D(this,40);this.a-=11},function(){this.v&128||(D(this,V(this)),this.a-=6);this.a-=5},function(){var a=V(this);wb(this,a);this.b=a>>8;this.a-=10},function(){var a=U(this);this.v&128||D(this,a);this.a-=10},function(){this.L&=-513;this.a-=4},function(){var a=U(this);this.v&128||(W(this,this.m),D(this,a),this.a-=6);
this.a-=11},function(){W(this,yb(this)&255|this.b<<8);this.a-=11},function(){this.b=O(this,T(this));this.a-=7},function(){W(this,this.m);D(this,48);this.a-=11},function(){this.v&128&&(D(this,V(this)),this.a-=6);this.a-=5},function(){this.C=I(this)&65535;this.a-=5},function(){var a=U(this);this.v&128&&D(this,a);this.a-=10},function(){this.L|=512;this.a-=4},function(){var a=U(this);this.v&128&&(W(this,this.m),D(this,a),this.a-=6);this.a-=11},Kb,function(){P(this,T(this));this.a-=7},function(){W(this,
this.m);D(this,56);this.a-=11}];function Y(a){v.call(this,"ChipSet",a,Y);var b=a.model;b&&!Lb[b]&&q("Unrecognized ChipSet model: "+b);this.aa=Lb[b]||Mb;a.sound&&(this.m=null,window&&(this.m=window.AudioContext||window.webkitAudioContext),this.m&&new this.m);B(this)}x(Y);var Mb=1978.1,Lb={SI1978:Mb};m=Y.prototype;m.P=function(){return!1};
m.ca=function(a,b,c,d){this.A=b;this.a=c;this.I=d;this.o=a;if(this.aa==Mb){var e;a=Nb;void 0===e&&(e=0);for(var f in a){c=b;d=+f+e;var h=a[f].bind(this);if(void 0!==h)for(var g=+f+e;g<=d;g++)void 0!==c.i[g]?q("Input port 0x"+n(g,4)+" already registered"):c.i[g]=[h,!1]}var k;e=Ob;void 0===k&&(k=0);for(var l in e)if(f=b,a=+l+k,c=e[l].bind(this),void 0!==c)for(d=+l+k;d<=a;d++)void 0!==f.j[d]?q("Output port 0x"+n(d,4)+" already registered"):f.j[d]=[c,!1]}};
m.W=function(a,b){if(!b)if(!a)this.reset();else if(!this.restore(a))return!1;return!0};m.V=function(a){return a?this.save():!0};m.reset=function(){this.f=this.h=this.c=this.b=this.l=this.j=this.i=0};m.save=function(){var a=new F(this);this.aa==Mb&&G(a,0,[this.i,this.j,this.l,this.b,this.c,this.f,this.h]);return a.data()};m.restore=function(a){a=a[0];this.aa==Mb&&(this.i=a[0],this.j=a[1],this.l=a[2],this.b=a[3],this.c=a[4],this.f=a[5],this.h=a[6]);return!0};m.start=function(){};m.stop=function(){};
m.kb=function(){return this.i};m.lb=function(){return this.j};m.mb=function(){return this.l};m.jb=function(){return this.b>>8-this.c&255};m.ob=function(a,b){this.c=b};m.qb=function(a,b){this.f=b};m.pb=function(a,b){this.b=b<<8|this.b>>8};m.rb=function(a,b){this.h=b};m.sb=function(){};var Nb={0:Y.prototype.kb,1:Y.prototype.lb,2:Y.prototype.mb,3:Y.prototype.jb},Ob={2:Y.prototype.ob,3:Y.prototype.qb,4:Y.prototype.pb,5:Y.prototype.rb,6:Y.prototype.sb};
t(function(){for(var a=A(document,"pc8080","chipset"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Y(d);Ea(d,c)}});function Pb(a){v.call(this,"ROM",a,Pb);this.b=null;this.j=a.addr;this.c=a.size;this.l=a.writable;this.f=a.alias;this.h=a.file;this.m=ba(this.h);if(this.h){a=this.h;var b=ca(this.m);"json"!=b&&"hex"!=b&&(a=ia()+"/api/v1/dump?file="+this.h+"&format=bytes&decimal=true");var c=this;p(a,null,!0,function(a,b,f){Qb(c,a,b,f)})}}x(Pb);var Rb=[0,5];
Pb.prototype.ca=function(a,b,c,d){this.A=b;this.a=c;this.I=d;Sb(this)};Pb.prototype.W=function(){this.i&&(this.I&&this.I.a(this.id,this.j,this.c,this.i),delete this.i);return!0};Pb.prototype.V=function(){return!0};
function Qb(a,b,c,d){if(d)a.K("Unable to load system ROM (error "+d+": "+b+")");else{Ca(a.Ta,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var e=eval("("+c+")"),f=e.bytes,h=e.data;if(f)a.b=f;else if(h)for(a.b=Array(4*h.length),d=c=0;c<h.length;c++)a.b[d++]=h[c]&255,a.b[d++]=h[c]>>8&255,a.b[d++]=h[c]>>16&255,a.b[d++]=h[c]>>24&255;else a.b=e;a.i=e.symbols;if(!a.b.length){q("Empty ROM: "+b);return}if(1==a.b.length){q(a.b[0]);return}}catch(g){a.K("ROM data error: "+g.message);return}else for(b=c.replace(/\n/gm,
" ").replace(/ +$/,"").split(" "),a.b=Array(b.length),e=0;e<b.length;e++)a.b[e]=aa(b[e]);Sb(a)}}
function Sb(a){if(!Ga(a))if(!a.h)B(a);else if(a.b&&a.A){a.c||(a.c=a.b.length);if(a.b.length!=a.c){var b="ROM size (0x"+n(a.b.length)+") does not match specified size ("+("0x"+n(a.c))+")";a.g.ba=!0;a.K(b)}else if(Tb(a,a.j)){b=[];"number"==typeof a.f?b.push(a.f):null!=a.f&&a.f.length&&(b=a.f);for(var c=0;c<b.length;c++){for(var d=a,e=b[c],f=d.A,h=d.c,g=[],k=d.j>>>f.G;0<h&&k<f.b.length;)g.push(f.b[k++]),h-=f.H;f=d.A;d=d.c;h=0;for(e>>>=f.G;0<d&&e<f.b.length;){k=g[h++];if(!k)break;f.b[e++]=k;d-=f.H}}delete a.b}B(a)}}
function Tb(a,b){if(Oa(a.A,b,a.c,a.l?1:Xa)){var c;for(c=0;c<a.b.length;c++)Qa(a.A,b+c,a.b[c]);if(a.l&&256==b){for(c=0;c<Rb.length;c++)Qa(a.A,Rb[c],118);vb(a.a,function(a){return function(b){if(0<=Rb.indexOf(b)){var c=!1,h=a.a,g=a.I;if(5==b)switch(c=!0,h.s){case 2:Ub(a,String.fromCharCode(h.u));break;case 9:for(var k=H(h),l="",E=255;E--;){var u=a.a.B(k++);if(36==u)break;l+=String.fromCharCode(u)}Ub(a,l);break;default:c=!1}c?Jb.call(h):g&&(a.O("\nCP/M vector 0x"+n(b,4)),D(h,b),mb(g));b=!0}else b=!1;
return b}}(a));xb(a.a,b)}return!0}return!1}function Ub(a,b){b=b.replace(/\r/g,"");a.Y&&(a.Y.value+=b,a.Y.scrollTop=a.Y.scrollHeight)}t(function(){for(var a=A(document,"pc8080","rom"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Pb(d);Ea(d,c)}});function Vb(a){v.call(this,"RAM",a,Vb);this.f=a.addr;this.c=a.size;this.b=!1}x(Vb);m=Vb.prototype;m.ca=function(a,b,c,d){this.A=b;this.a=c;this.I=d;B(this)};m.W=function(a,b){b||this.reset();return!0};m.V=function(a){return a?this.save():!0};
m.reset=function(){!this.b&&this.c&&Oa(this.A,this.f,this.c,1)&&(this.b=!0,this.status(Math.floor(this.c/1024)+"Kb allocated"));this.b||q("No RAM allocated")};m.save=function(){return null};m.restore=function(){return!0};t(function(){for(var a=A(document,"pc8080","ram"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Vb(d);Ea(d,c)}});function Wb(a){v.call(this,"Keyboard",a,Wb);B(this)}x(Wb);t(function(){for(var a=A(document,"pc8080","keyboard"),b=0;b<a.length;b++){var c=a[b],d=z(c),d=new Wb(d);Ea(d,c)}});
function Xb(a){v.call(this,"Video",a,Xb);this.gb=a.interruptRate;this.X=a.refreshRate||60;B(this)}x(Xb);Xb.prototype.ca=function(a,b,c,d){this.o=a;this.A=b;this.a=c;this.I=d};
t(function(){for(var a=A(document,"pc8080","video"),b=0;b<a.length;b++){var c=a[b],d=z(c),e=document.createElement("canvas");if(void 0===e||!e.getContext){c.innerHTML="<br/>Missing &lt;canvas&gt; support. Please try a newer web browser.";break}e.setAttribute("class","pcjs-canvas");e.setAttribute("width",d.screenWidth);e.setAttribute("height",d.screenHeight);e.style.backgroundColor=d.screenColor;e.style.height="auto";0<=(window?window.navigator.userAgent:"").indexOf("MSIE")&&(c.onresize=function(a,
b,c,d){return function(){b.style.height=(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||wa.aspect);f&&.3<=f&&3.33>=f&&(ra("onresize",function(a,b,c){return function(){b.style.height=(a.clientWidth/c|0)+"px"}}(c,e,f)),window.onresize());c.appendChild(e);f=document.createElement("textarea");oa("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);e.getContext("2d");d=new Xb(d);Ea(d,c)}});
function F(a,b,c){this.id=a.id;this.key=Yb(a,b,c);this.I=a.I;Zb(this,a.bb)}function Yb(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}
F.prototype={constructor:F,value:function(){return this[this.id]},data:function(){return this[this.id]},toString:function(){var a=this[this.id];return"string"==typeof a?a:JSON.stringify(a)},clear:function(a){Zb(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(e){}for(c=0;c<b.length;c++)if((d=b[c])&&(a||d.substr(0,this.key.length)==this.key)){try{window.localStorage.removeItem(d)}catch(e){}b.splice(c,1);c=0}}};
function Zb(a,b){a[a.id]={};b&&G(a,"parms",b);a.a=!1}function $b(a){var b=!0;if(la()){var c=JSON.stringify(a[a.id]);na(a.key,c)||(q("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function ac(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){q(c.message||c),b=!1}return b}function bc(a,b){return b?(a[a.id]=b,a.a=!0):a.a?!0:la()&&(b=ma(a.key))?(a[a.id]=b,a.a=!0):!1}function cc(a,b){return a[a.id][b]||null}function G(a,b,c){try{a[a.id][b]=c}catch(d){}}
function dc(a,b,c){v.call(this,"Computer",a,dc);this.g.J=!1;ec(this,b);this.D=hb(this,"autoPower",a);this.f=0;this.M=a.busWidth||a.buswidth;this.b=fc;this.o=null;this.j=this.L=!1;this.N=hb(this,"url")||"";(Math.random()+.1).toString(36);this.c=gc(this);if(this.a=Da("CPU",this.id)){this.I=Da("Debugger",this.id);this.C=[];for(b=null;b=Ka(this,"Video",b);)this.C.push(b);this.A=new Ma({id:this.Ta+".bus",busWidth:this.M},this.a,this.I);var d,e=y(this.id);if((this.h=Da("Panel",this.id))&&this.h.Y)for(b=
0;b<e.length;b++)d=e[b],d.K=this.h.K,d.O=this.h.O,d.Y=this.h.Y;for(b=0;b<e.length;b++)d=e[b],d.ca&&d.ca(this,this.A,this.a,this.I);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.m=d:this.b=parseInt(d,10));var f;if(a=hb(this,"state")||(f=!0,a.state))b=this.F=a,f||(this.j=!0,this.b=fc),this.b&&(this.v=new F(this,Z),bc(this.v)?b=null:delete this.v);!b&&this.b&&(b=hc(this))&&(this.j=!0);if(b){var h=this;p(b,null,!0,function(a,b,c){c?(h.m=null,h.j=!1,h.K("Unable to load machine state from server (error "+
c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(h.o=b,h.L=!0);B(h)})}else B(this);this.w.power||(this.D=!0);!c&&this.D&&ic(this,this.ya)}else q("Unable to find CPU component")}x(dc);var Z="1.22.0",fc=0;function ec(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){q(d.message+" ("+c+")")}}a.l=b}
function hb(a,b,c){var d=b.toLowerCase(),d=wa[b]||wa[d];void 0===d&&a.l&&(d=a.l[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function ic(a,b,c){for(var d=y(a.id),e=0;e<=d.length;e++){var f=e<d.length?d[e]:a;if(!Ga(f)){Ga(f,function(){ic(a,b,c)});return}}b.call(a,c)}
function jc(a,b){var c=new F(a,Z,"validate");if(bc(c)&&ac(c)){var d=cc(c,"timestamp"),e=b?cc(b,"timestamp"):"unknown";d!=e&&(a.K("Machine state may be out-of-date\n("+d+" vs. "+e+")\nCheck your browser's local storage limits"),b||c.clear())}}m=dc.prototype;
m.ya=function(a){void 0===a&&(a=this.b||(this.o?1:fc));if(!this.f){this.f++;var b=!1,c=!1;this.H=!1;var d=this.v||new F(this,Z);if(-1==a)b=!0;else if(a>fc){if(bc(d,this.o)){this.i=new F(this,Z,"failsafe");bc(this.i)&&(kc(this,d),a=2,Zb(this.i));G(this.i,"timestamp",ha());$b(this.i);var e=this.b&&!this.j;if(1==a||ja("Click OK to restore the previous PC8080 machine state, or CANCEL to reset the machine.")){if(c=ac(d)){var f=cc(d,"code"),h=cc(d,"data");f&&("ok"==f?bc(d,h):("error"==f&&"no machine state"!=
h?(this.K("Error: "+h),"unable to verify user"==h&&(na("user",""),this.c=null)):this.O(f+": "+h),Zb(d),bc(d)?(c=ac(d),e=!0):c=!1))}e&&jc(this,c?d:null)}else 2==a&&d.clear()}else jc(this);delete this.o;delete this.v}e=y(this.id);for(f=0;f<e.length;f++)h=e[f],h!==this&&h!=this.a&&(c=lc(this,h,d,b,c));b=[d,a,c];-1!=a?ic(this,this.Ua,b):this.Ua(b)}};
function lc(a,b,c,d,e){if(!b.g.J){b.g.J=!0;if(b.W){var f=null;e&&((f=cc(c,b.id))||(f=cc(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof f&&(f=null);!b.W(f,d)&&f&&(q("Unable to restore state for "+b.type),a.F&&!a.L?(c.clear(),a.b=fc,window&&window.location.reload()):a.H=!0,b.W(null),e=!1)}if(!d&&b.Ra)for(a=b.Ra.split("|"),c=0;c<a.length;c++)b.status(a[c])}return e}
m.Ua=function(a){var b=a[0],c=0>a[1];a=a[2];this.g.J=!0;var d=this.w.power;d&&(d.textContent="Shutdown");this.G||(this.O("PC8080 v"+Z+"\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>"),this.G=!0);this.a&&(lc(this,this.a,b,c,a),lb(this.a));this.H&&(kc(this,b),b.clear());!c&&this.i&&(this.i.clear(),delete this.i);this.f=0};
function kc(a,b){if(ja("There may be a problem with your PC8080 machine.\n\nTo help us diagnose it, click OK to send this PC8080 machine state to http://www.pcjs.org.")){var c=a.N,d=a.c||"",e=b.toString(),f={app:"PC8080"};f.ver=Z;f.url=c;f.user=d;f.type="bug";f.data=e;p("http://www.pcjs.org/api/v1/report",f,!0)}}
function mc(a,b,c){var d,e="none";if(a.f)return null;a.f--;var f=new F(a,Z),h=new F(a,Z,"validate"),g=ha();G(h,"timestamp",g);G(f,"timestamp",g);G(f,"version","1.22.0");G(f,"url",window?window.location.href:null);G(f,"browser",window?window.navigator.userAgent:"");a.a&&a.a.V&&(c&&mb(a.a),d=a.a.V(b,c),"object"===typeof d&&G(f,a.a.id,d),c&&(a.a.g.J=!1,!1===d&&(e=null)));for(var g=y(a.id),k=0;k<g.length;k++){var l=g[k];l.g.J&&(l.V&&(d=l.V(b,c),"object"===typeof d&&G(f,l.id,d)),c&&(l.g.J=!1,!1===d&&(e=
null)))}e&&(c?(g=d=!1,b?(a.c&&nc(a,a.c,f.toString()),$b(h)&&$b(f)||(e=null,d=g=!0)):a.b&&(d=!0,g=3==a.b),d&&f.clear(g)):e=f.toString());c&&(a.g.J=!1,b=a.w.power)&&(b.textContent="Power");a.f=0;return e}m.reset=function(){this.A&&this.A.reset&&this.A.reset();for(var a=y(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.A&&c.reset&&c.reset()}};m.start=function(a,b){for(var c=y(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.start&&e.start(a,b)}};
m.stop=function(a,b){for(var c=y(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"!=e.type&&e!==this&&e.stop&&e.stop(a,b)}};
m.P=function(a,b,c){var d=this;switch(b){case "power":return this.w[b]=c,c.onclick=function(){d.f||(d.g.J?mc(d,!1,!0):ic(d,d.ya))},!0;case "reset":return this.w[b]=c,c.onclick=function(){if(d.g.J&&!d.f)if(d.b&&!d.m){var a=ja("Click OK to save changes to this PC8080 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");mc(d,a,!0);!a&&d.F?window&&window.location.reload():d.ya(fc)}else d.reset(),d.a&&lb(d.a)},!0;case "save":if(da(ia(),"pcjs.org")){c.parentNode.removeChild(c);break}this.w[b]=
c;c.onclick=function(){var a=gc(d,!0);if(a){var b=!!(d.b&&!d.m||d.F),c=mc(d,b);b?nc(d,a,c):d.K("Resume disabled, machine state not saved")}};return!0}return!1};
function gc(a,b){var c=a.c;c||(c=ma("user"),void 0!==c?!c&&b&&(c=null,window&&(c=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c&&((c=oc(a,c))||a.K("The user ID is invalid."))):b&&a.K("Browser local storage is not available"));return c}
function oc(a,b){a.c=null;var c=p(ia()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(na("user",c.data),a.c=c.data)}catch(e){q(e.message+" ("+d+")")}return a.c}function hc(a){var b=null;a.c&&(b=ia()+"/api/v1/user?req=load&user="+a.c+"&state="+Yb(a,Z));return b}
function nc(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=Yb(a,Z);d.data=c;b=p(ia()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.K("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.K(c),na("user",""),a.c=null)}}
function Ka(a,b,c){a=y(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}m.fa=function(a){this.a&&this.a.fa(a);this.h&&this.h.fa(a)};function rb(a,b){for(var c=0;c<a.C.length;c++){var d=a.C[c];b&1?(d=d.a,d.F=d.F&-8|10):(d=d.a,d.F=d.F&-8|9)}}t(function(){for(var a=A(document,"pc8080-machine"),b=0;b<a.length;b++)for(var c=a[b],d=z(c),c=A(c,"pc8080","computer"),e=0;e<c.length;e++){var f=c[e],h=z(f),h=new dc(h,d,!0);Ea(h,f);h.D&&ic(h,h.ya)}});
r.show.push(function(){for(var a=A(document,"pc8080","computer"),b=0;b<a.length;b++){var c=z(a[b]);(c=Da("Computer",c.id))&&c.G&&!c.g.J&&c.ya(-1)}});r.exit.push(function(){for(var a=A(document,"pc8080","computer"),b=0;b<a.length;b++){var c=z(a[b]);(c=Da("Computer",c.id))&&c.g.J&&mc(c,!(!c.b||c.m),!0)}});var pc=0;function qc(a,b,c,d,e,f){e("Loading "+a+"...");p(a,null,!0,function(h,g,k){k?(g||(g="unable to load "+a+" ("+k+")"),f(g,null)):rc(g,a,b,c,d,e,f)})}
function rc(a,b,c,d,e,f,h){function g(a,f){if(f)h(f,null);else{if(c){Ca(c,b,a);var g=b;g&&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="APPCLASS">).*?(<\/xsl:variable>)/,"$1pc8080$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(u){g=null,a=u.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);h(a,g)}}a?e?sc(a,f,g):g(a,null):h("no data"+(b?" for file: "+b:""),null)}
function sc(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");p(e,null,!0,function(f,h,g){if(g||!h)c(a,"unable to resolve XML reference: "+d[0]+" ("+g+")");else{if(f=d[3])if(g=h.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var k=g[0],l,E=/( [a-z]+=)(['"])(.*?)\2/g;l=E.exec(f);)k=0>k.indexOf(l[1])?k.replace(">",l[0]+">"):k.replace(new RegExp(l[1]+"(['\"])(.*?)\\1"),l[0]);g[0]!=k&&(h=h.replace(g[0],k))}else{c(a,"missing <"+d[1]+"> in "+e);return}h=h.replace(/<\?xml[^>]*>[\r\n]*/,
"");a=a.replace(d[0],h);sc(a,b,c)}})}else c(a,null)}
function tc(a,b,c,d){function e(a){if(void 0===g){var b=h&&A(h,"machine-warning");g=b&&b[0]||h}g&&(g.innerHTML=fa(a))}function f(a){e("Error: "+a);k&&(--pc||ta(!0));k=!1}var h,g,k=!0;pc++;Ba[a]={};try{if(h=document.getElementById(a)){var l;if("object"==typeof resources&&(l=resources.css)){var E=document.head||document.getElementsByTagName("head")[0],u=document.createElement("style");u.type="text/css";u.styleSheet?u.styleSheet.cssText=l:u.appendChild(document.createTextNode(l));E.appendChild(u)}c||
(c="/versions/pc8080/1.22.0/components.xsl");l=function(d,g){g?qc(c,null,null,!1,e,function(d,l){if(l)if(Ca(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var k=g.transformNode(l);k?(h.outerHTML=k,--pc||ta(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(k=new XSLTProcessor,k.importStylesheet(l),(k=k.transformToFragment(g,document))?h.parentNode?(h.parentNode.replaceChild(k,h),--pc||ta(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?qc(b,a,d,!0,e,l):rc(b,null,a,d,!1,e,l)}else f("missing machine element: "+a)}catch(Ra){f(Ra.message)}return k}window.embedPC8080=function(a,b,c,d){ta(!1);return tc(a,b,c,d)};window.enableEvents=ta;window.sendEvent=ua;
function uc(a,b,c,d){if(!c&&b){d.push(b);a=Ba[d[0]];b=null;for(var e in a)if(da(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?p(b,null,!0,function(a,b){vc(b,d)}):vc(null,d)}else q("Error ("+c+") requesting "+a)}
function vc(a,b){var c,d,e,f=b[0],h=b[1];c=b[4];c=c.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var g=Ba[f],k={},l;for(l in g){var E=g[l],u=ca(l);if("xml"==u){for(u=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;d=u.exec(g[l]);){var Ra=d[2];Ra&&(g[Ra]||(E=E.replace(d[0],"")))}d=l=ba(l)}else"xsl"==u&&(e=l=ba(l));k[l]=E}a&&(k[l="css"]=a);b[2]&&(k[l="parms"]=b[2]);b[3]&&(k[l="state"]=b[3]);d&&e?(l=JSON.stringify(k),h+=".js",c=c[1]+"var resources="+l+";"+c[2]+c[3],c=c.replace(/\u00A9/g,
"&#xA9;"),l=h,g=null,k="data:application/javascript,",k=oa("Firefox")?k+encodeURIComponent(c):k+encodeURI(c),l&&(g=document.createElement("a"),"string"!=typeof g.download&&(g=null)),g?(g.href=k,g.download=l,document.body.appendChild(g),g.click(),document.body.removeChild(g),c="Check your Downloads folder for "+l+"."):(window.open(k),c="Check your browser for a new window/tab containing the requested data"+(l?" ("+l+")":"")+"."),c+=', copy it to your web server as "'+h+'", and then add the following to your web page:\n\n',
c+='<div id="'+f+'"></div>\n',c+="...\n",c+='<script type="text/javascript" src="'+h+'">\x3c/script>\n',c+='<script type="text/javascript">embedPC("'+f+'","'+d+'","'+e+'");\x3c/script>\n\n',c+="The machine should appear where the <div> is located.",q(c)):q("Missing XML/XSL resources")}
window.savePC=function(a,b,c){var d=Da("Computer",a),e=Da("Debugger",a);if(d){var f=mc(d,!0),h=d.l?JSON.stringify(d.l):null;b||(b="/versions/pcjs/1.22.0/pc"+(e?"-dbg":"")+".js");if(c&&c({state:f,bb:h}))return!0;p(b,null,!0,function(c,d,e){uc(c,d,e,[a,ba(b,!0),h,f])});return!0}q("Unable to identify machine '"+a+"'");return!1};})();