diff --git a/versions/c1pjs/1.21.7/c1p-dbg.js b/versions/c1pjs/1.21.7/c1p-dbg.js
index 66c2bf2a3..3bf6a8ce6 100644
--- a/versions/c1pjs/1.21.7/c1p-dbg.js
+++ b/versions/c1pjs/1.21.7/c1p-dbg.js
@@ -156,8 +156,8 @@ Z.prototype.start=function(){for(var a in this.Y)if("cpu"!=a)for(var b=0;b
");b&&b.ha(!0,a)}
x(function(){for(var a=G(document,"c1pjs","computer"),b=0;b');return}}if(void 0===h){u(' definition must appear first in the 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;dk.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(k=window.location.pathname+k);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(k?' url="'+k+'"':""))}k=null;if("<"==a.charAt(0))try{e||(a=a.replace(/\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: "+(255k.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(k=window.location.pathname+k);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(k?' url="'+k+'"':""))}e||(a=a.replace(/().*?(<\/xsl:variable>)/,
+"$1c1pjs$2"));k=null;if("<"==a.charAt(0))try{e||(a=a.replace(/\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/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=
diff --git a/versions/c1pjs/1.21.7/c1p.js b/versions/c1pjs/1.21.7/c1p.js
index 922e12ee7..fee8dc509 100644
--- a/versions/c1pjs/1.21.7/c1p.js
+++ b/versions/c1pjs/1.21.7/c1p.js
@@ -116,8 +116,8 @@ Y.prototype.reset=function(a){var b=null,c;for(c in this.M)for(var d=0;d");b&&b.$(!0,a)}
y(function(){for(var a=I(document,"c1pjs","computer"),b=0;b');return}}if(void 0===k){t(' definition must appear first in the 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;dh.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}h=null;if("<"==a.charAt(0))try{f||(a=a.replace(/\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: "+(255h.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}f||(a=a.replace(/().*?(<\/xsl:variable>)/,
+"$1c1pjs$2"));h=null;if("<"==a.charAt(0))try{f||(a=a.replace(/\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/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.21.7/components.xsl");
diff --git a/versions/pcjs/1.21.7/components.css b/versions/pcjs/1.21.7/components.css
index b0e03456c..3fa6fff6e 100644
--- a/versions/pcjs/1.21.7/components.css
+++ b/versions/pcjs/1.21.7/components.css
@@ -34,7 +34,7 @@
float: left;
font-family: "Lucida Console", monospace;
}
-.pcjs-control textarea {
+.pcjs-controls textarea {
font-family: Monaco, monospace;
font-size: x-small;
}
diff --git a/versions/pcjs/1.21.7/components.xsl b/versions/pcjs/1.21.7/components.xsl
index 804497507..9fd3dc2e9 100644
--- a/versions/pcjs/1.21.7/components.xsl
+++ b/versions/pcjs/1.21.7/components.xsl
@@ -10,6 +10,7 @@
pc
+ pcjs
pcjs
1.21.7
www.pcjs.org
@@ -57,7 +58,13 @@
float:
-
+
+
+ js
+
+
+
+
@@ -203,7 +210,7 @@
-
+
@@ -214,7 +221,7 @@
-
-
+
-
-
+
+
@@ -248,7 +255,7 @@
-
+
@@ -256,7 +263,7 @@
-
+
@@ -345,7 +352,7 @@
- -label
+ -label
@@ -363,12 +370,12 @@
-
+
-
+
@@ -392,14 +399,14 @@
-
+
@@ -411,12 +418,12 @@
-
+
-
+
diff --git a/versions/pcjs/1.21.7/pc-dbg.js b/versions/pcjs/1.21.7/pc-dbg.js
index 68317b23a..b162d91d6 100644
--- a/versions/pcjs/1.21.7/pc-dbg.js
+++ b/versions/pcjs/1.21.7/pc-dbg.js
@@ -540,7 +540,7 @@ function ko(a,b,c,d,e){if(b.AcMissing <canvas> 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<=ya().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=+Ya.aspect;f&&.3<=f&&3.33>=f&&(Pa("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");Ga("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var g=e.getContext("2d"),d=new Z(d,e,g,f,c);mb(d,c)}});
+(a.clientWidth*d/c|0)+"px"}}(c,e,d.screenWidth,d.screenHeight),c.onresize());var f=+(d.aspect||Ya.aspect);f&&.3<=f&&3.33>=f&&(Pa("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");Ga("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var g=e.getContext("2d"),d=new Z(d,e,g,f,c);mb(d,c)}});
function no(a){this.W=a.adapter;switch(this.W){case 1:this.V=956;this.C=7;break;case 2:this.V=888;this.C=7;break;case 3:this.V=632;this.C=5;break;default:w("Unrecognized parallel adapter #"+this.W);return}this.A=this.B=null;Ua.call(this,"ParallelPort",a,no,4194304);a=a.binding;"console"==a?this.B="":kb(this,a,oo)}db(no);var oo="buffer";m=no.prototype;m.Qb=function(a,b,c){switch(b){case oo:return this.qa[b]=this.A=c,!0}return!1};
m.Ic=function(a,b,c,d){this.ea=b;this.F=c;this.ha=d;this.N=Eb(a,"ChipSet");hc(b,this,po,this.V);lc(b,this,qo,this.V);rb(this)};m.ic=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};m.hc=function(a){return a?this.save():!0};m.reset=function(){ro(this)};m.save=function(){var a=new hf(this),b=0,c=[];c[b++]=this.L;c[b++]=this.Yb;c[b]=this.Bf;N(a,0,c);return a.data()};m.restore=function(a){return ro(this,a[0])};
function ro(a,b){var c=0;void 0===b&&(b=[0,0,0]);a.L=b[c++];a.Yb=b[c++];a.Bf=b[c];return!0}m.tl=function(a,b){var c=this.L;x(this,a,null,b,"DATA",c);return c};m.Rl=function(a,b){var c=this.Yb;x(this,a,null,b,"STAT",c);return c};m.pl=function(a,b){var c=this.Bf;x(this,a,null,b,"CTRL",c);return c};
@@ -804,8 +804,8 @@ function dd(a,b){for(var c=0;c>1,h.U+=(h.X>>1)-2,Jb(h,e),h.ra&&(h.N.restore(),h.ra=!1)}}else Jb(c,"This space intentionally left blank");c.context.drawImage(c.aa,0,0,c.aa.width,c.aa.height,c.sb,c.Jb,c.$a,c.fb);c.Ja=!1}}
Qa(function(){for(var a=nb(document,"pcjs-machine"),b=0;bh.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}h=null;if("<"==a.charAt(0))try{e||(a=a.replace(/\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(q){h=null,a=q.message}else a="unrecognized XML: "+(255h.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}e||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1pcjs$2"));
+h=null;if("<"==a.charAt(0))try{e||(a=a.replace(/\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(q){h=null,a=q.message}else a="unrecognized XML: "+(255/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||
diff --git a/versions/pcjs/1.21.7/pc.js b/versions/pcjs/1.21.7/pc.js
index 04bd16ceb..5c790ffe6 100644
--- a/versions/pcjs/1.21.7/pc.js
+++ b/versions/pcjs/1.21.7/pc.js
@@ -501,7 +501,7 @@ function Fl(a,b,c){if(b.scMissing <canvas> 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=+La.aspect;f&&.3<=f&&3.33>=f&&(Da("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");ya("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var g=e.getContext("2d"),d=new Y(d,e,g,f,c);Ya(d,c)}});
+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||La.aspect);f&&.3<=f&&3.33>=f&&(Da("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");ya("iOS")&&(f.setAttribute("autocapitalize","off"),f.setAttribute("autocorrect","off"));c.appendChild(f);var g=e.getContext("2d"),d=new Y(d,e,g,f,c);Ya(d,c)}});
function Hl(a){this.I=a.adapter;switch(this.I){case 1:this.G=956;this.D=7;break;case 2:this.G=888;this.D=7;break;case 3:this.G=632;this.D=5;break;default:n("Unrecognized parallel adapter #"+this.I);return}this.B=this.C=null;Ia.call(this,"ParallelPort",a,Hl);a=a.binding;"console"==a?this.C="":Xa(this,a,Il)}Qa(Hl);var Il="buffer";l=Hl.prototype;l.zb=function(a,b,c){switch(b){case Il:return this.ka[b]=this.B=c,!0}return!1};
l.pc=function(a,b,c,d){this.ha=b;this.A=c;this.Ia=d;this.P=kb(a,"ChipSet");Nb(b,this,Jl,this.G);Pb(b,this,Kl,this.G);ab(this)};l.Vb=function(a,b){if(!b)if(!a||!this.restore)this.reset();else if(!this.restore(a))return!1;return!0};l.Ub=function(a){return a?this.save():!0};l.reset=function(){Ll(this)};l.save=function(){var a=new ce(this),b=0,c=[];c[b++]=this.H;c[b++]=this.Db;c[b]=this.Ie;C(a,0,c);return a.data()};l.restore=function(a){return Ll(this,a[0])};
function Ll(a,b){var c=0;void 0===b&&(b=[0,0,0]);a.H=b[c++];a.Db=b[c++];a.Ie=b[c];return!0}l.jk=function(){return this.H};l.Ik=function(){return this.Db};l.fk=function(){return this.Ie};
@@ -622,8 +622,8 @@ function yc(a,b){for(var c=0;c>1,h.K+=(h.L>>1)-2,pb(h,e),h.da&&(h.G.restore(),h.da=!1)}}else pb(c,"This space intentionally left blank");c.context.drawImage(c.P,0,0,c.P.width,c.P.height,c.Oa,c.Xa,c.Da,c.Fa);c.ua=!1}}
Ea(function(){for(var a=Za(document,"pcjs-machine"),b=0;bh.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}h=null;if("<"==a.charAt(0))try{e||(a=a.replace(/\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(x){h=null,a=x.message}else a="unrecognized XML: "+(255h.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(h=window.location.pathname+h);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(h?' url="'+h+'"':""))}e||(a=a.replace(/().*?(<\/xsl:variable>)/,"$1pcjs$2"));
+h=null;if("<"==a.charAt(0))try{e||(a=a.replace(/\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(x){h=null,a=x.message}else a="unrecognized XML: "+(255/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||