Merge branch 'master' into gh-pages

# Conflicts:
#	_posts/2017-01-03-pdp-11-tutorials.md
This commit is contained in:
Jeff Parsons 2017-01-03 17:30:58 -08:00 committed by Jeff Parsons
commit 80779fbab2
7 changed files with 82 additions and 34 deletions

View file

@ -41,22 +41,22 @@ scrolling off the top; it "sticks" to the top instead. The rest of the page scr
progress at their own pace through the text and/or images of an accompanying tutorial.
The second feature is a generalized method for sending commands to components within a machine. For example, if we
want to send some keyboard commands to a machine:
want to send some serial data to a machine:
{% raw %}
{% include machine-command.html type='button' label='Try It!' machine='vt100' component='Keyboard' command='sendString' value='Hello World' %}
{% include machine-command.html type='button' label='Try It!' machine='vt100' component='SerialPort' command='receiveData' value='Hello World' %}
{% endraw %}
which should translate into a control that looks like this:
<button type="button" onclick="commandMachine('vt100','Keyboard','sendString','Hello World')">Try It!</button>
<button type="button" onclick="commandMachine('vt100','SerialPort','receiveData','Hello World')">Try It!</button>
In fact, let's try it now. {% include machine-command.html type='button' label='Try It!' machine='vt100' component='Keyboard' command='sendString' value='Hello World' %}
In fact, let's try it now. {% include machine-command.html type='button' label='Try It!' machine='vt100' component='SerialPort' command='receiveData' value='Hello World' %}
Obviously, every component we want to control will need to be updated to export the necessary "command" functions.
So expect some PDPjs tutorials in the near future, featuring sticky machines and built-in command demos. Some
commands will be very simple, like the keyboard injection command shown above. Others will perform more sophisticated
commands will be very simple, like the data injection command shown above. Others will perform more sophisticated
operations, such as loading and booting a particular disk, running a particular application, automatically flipping
selected Front Panel switches, and so on.

View file

@ -594,6 +594,18 @@ function embedPDP11(idMachine, sXMLFile, sXSLFile, sParms)
return embedMachine("PDPjs", "pdp11", APPVERSION, idMachine, sXMLFile, sXSLFile, sParms);
}
/**
* findMachineComponent(idMachine, sType)
*
* @param {string} idMachine
* @param {string} sType
* @return {Component|null}
*/
function findMachineComponent(idMachine, sType)
{
return Component.getComponentByType(sType, idMachine + ".machine");
}
/**
* Prevent the Closure Compiler from renaming functions we want to export, by adding them as global properties.
*/
@ -611,5 +623,7 @@ if (APPNAME == "PDPjs") {
window['embedPDP11'] = embedPDP11;
}
window['findMachineComponent'] = findMachineComponent;
window['enableEvents'] = Web.enablePageEvents;
window['sendEvent'] = Web.sendPageEvent;

View file

@ -1,5 +1,5 @@
/**
* @fileoverview Support for "sticky" machines
* @fileoverview Support for "sticky" machines and commands that drive them.
* @author <a href="mailto:Jeff@pcjs.org">Jeff Parsons</a> (@jeffpar)
* @copyright © Jeff Parsons 2012-2017
*
@ -29,11 +29,19 @@
"use strict";
/**
* addStickyMachine(idMachine)
* addStickyMachine(idMachine, sPosition)
*
* If a machine is defined with a 'sticky' property, then the page containing that machine should
* also contain a call this function. Technically, the 'sticky' property's value should also be passed
* via sPosition, but since the only page position we currently support is "top", callers are currently
* omitting it, and "top" is simply assumed.
*
* TODO: Do something intelligent if sPosition is NOT omitted and is NOT "top".
*
* @param {string} idMachine
* @param {string} [sPosition] (if omitted, "top" is assumed)
*/
function addStickyMachine(idMachine)
function addStickyMachine(idMachine, sPosition)
{
var topMachine = -1;
var prevOnScroll = window.onscroll;
@ -68,16 +76,42 @@ function addStickyMachine(idMachine)
}
/**
* commandMachine(idMachine, typeComponent, sCommand, sValue)
* commandMachine(idMachine, sType, sCommand, sValue)
*
* Note that this script is not compiled into any of the machines, since "sticky machines" are feature of the PCjs
* website rather than of the machines. And since the machines are compiled, all their code and data is completely
* opaque to us, except for those functions explicitly exported by embed.js.
*
* So now, in addition to the functions for embedding machines on a webpage, embed.js includes a new function:
*
* findMachineComponent()
*
* which uses existing Component methods to find the requested component type for a specific machine, and if a
* component is found, then its 'exports' table is checked for an entry matching the specified command string, and if
* an entry is found, then the corresponding function is called with the specified data.
*
* @param {string} idMachine
* @param {string} typeComponent
* @param {string} sType
* @param {string} sCommand
* @param {string} [sValue]
*/
function commandMachine(idMachine, typeComponent, sCommand, sValue)
function commandMachine(idMachine, sType, sCommand, sValue)
{
console.log("commandMachine('" + idMachine + "','" + typeComponent + "','" + sCommand + "','" + sValue + "')");
if (window.findMachineComponent) {
var component = window.findMachineComponent(idMachine, sType);
if (component) {
var exports = component['exports'];
if (exports) {
var fnCommand = exports[sCommand];
if (fnCommand) {
//noinspection JSUnresolvedFunction
fnCommand.call(component, sValue);
return;
}
}
}
}
console.log("unimplemented: commandMachine('" + idMachine + "','" + typeComponent + "','" + sCommand + "','" + sValue + "')");
}
/**

View file

@ -57,7 +57,7 @@ function ab(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return
function eb(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}function fb(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}}function gb(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}
function hb(a){ib.init.push(a)}function kb(a){if(lb)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){ga("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks.",void 0,void 0)}}function mb(a){!lb&&a?(lb=!0,nb&&ob("init"),pb&&ob("show")):lb=a}function ob(a){ib[a]&&kb(ib[a])}var db=null,ib={init:[],show:[],exit:[]},nb=!1,pb=!1,lb=!0,Wa=null;gb("onload",function(){nb=!0;kb(ib.init)});gb("onpageshow",function(){pb=!0;kb(ib.show)});
gb(bb("Opera")||bb("iOS")?"onunload":"onbeforeunload",function(){kb(ib.exit)});
var rb="undefined"!==typeof ArrayBuffer,sb=[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,
var qb="undefined"!==typeof ArrayBuffer,sb=[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],tb={cpu:1,bus:64,mem:128,port:256,nvr:16384,chipset:32768,keyboard:65536,key:131072,video:262144,fdc:524288,disk:2097152,serial:8388608,speaker:33554432,computer:67108864,log:268435456,warn:536870912,buffer:1073741824,halt:-2147483648};function ub(a){n.call(this,"Panel",a)}ba(ub,n);
ub.prototype.ca=function(a,b,c,d){return this.S&&this.S.ca(a,b,c,d)||this.u&&this.u.ca(a,b,c,d)||this.B&&this.B.ca(a,b,c,d)||this.K&&this.K.ca(a,b,c,d)?!0:n.prototype.ca.call(this,a,b,c,d)};ub.prototype.Ea=function(a,b,c,d){this.S=a;this.H=b;this.u=c;this.K=d;this.B=vb(a,"Keyboard")};ub.prototype.ua=function(a,b){b||wb();return!0};ub.prototype.wa=function(){return!0};
function wb(){for(var a=!1,b=pa(document,"pc8080","panel"),c=0;c<b.length;c++){var d=b[c],e=na(d),f=ka(e.id);f||(a=!0,f=new ub(e));oa(f,d);a&&sa(f)}}hb(wb);
@ -67,14 +67,14 @@ function Eb(a,b){return a.b[(b&a.C)>>>a.g].lb(b&a.j,b)}function Fb(a,b){var c=b&
function Jb(a){for(var b=0,c=[],d=0;d<a.L;d++){var e=a.b[d];if(e.Ca||e.gc){c[b++]=d;var f=b++;if(e=e.save()){for(var g=0,h=0,l=[];g<e.length;){for(var p=e[g],r=g+1;r<e.length&&e[r]===p;)r++;l[h++]=r-g;l[h++]=p;g=r}l.length<e.length&&(e=l)}c[f]=e}}return c}function Kb(a,b){if(void 0===b)return a.D=!a.D,a.D;void 0===a.A[b]&&(a.A[b]=[null,!1]);a.A[b][1]=!a.A[b][1];return a.A[b][1]}
function Nb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,g=+e+d,h=c[e].bind(b);if(h)for(var l=+e+d;l<=g;l++)void 0!==f.A[l]?q("Input port "+y(l)+" already registered"):f.A[l]=[h,!1]}}function Ob(a,b,c){for(var d=1,e=0,f=0;0<d;){var g=a.A[b],h=a.R[b]||1,l=1==h?255:2==h?65535:-1,p=l;void 0!==g?(g[0]&&(p=g[0](b,c),void 0===p?p=l:p&=l),a.K&&a.D!=g[1]&&Pb(a.K,b,p)):a.K&&(za(a.K,a,b,null,c),a.D&&Pb(a.K,b,p));e|=p<<f;f+=h<<3;b+=h;d-=h}return e}
function Qb(a,b){if(void 0===b)return a.F=!a.F,a.F;void 0===a.B[b]&&(a.B[b]=[null,!1]);a.B[b][1]=!a.B[b][1];return a.B[b][1]}function Rb(a,b,c,d){void 0===d&&(d=0);if(c)for(var e in c){var f=a,g=+e+d,h=c[e].bind(b);if(h)for(var l=+e+d;l<=g;l++)void 0!==f.B[l]?q("Output port "+y(l)+" already registered"):f.B[l]=[h,!1]}}
function Sb(a,b,c,d){for(var e=1,f=0;0<e;){var g=a.B[b],h=a.T[b]||1,l=1==h?255:2==h?65535:-1,l=(c>>>=f)&l;if(void 0!==g){if(g[0])g[0](b,l,d);a.K&&a.F!=g[1]&&Tb(a.K,b,l)}else a.K&&(za(a.K,a,b,l,d),a.F&&Tb(a.K,b,l));f+=h<<3;b+=h;e-=h}}function Ab(a,b,c){q("Memory block error ("+a+": "+x(b)+","+x(c)+")");return!1}var Bb=1,Db=2,Ub;if(rb){var Vb=new ArrayBuffer(2);(new DataView(Vb)).setUint16(0,256,!0);Ub=256===(new Uint16Array(Vb))[0]}else Ub=!1;var Wb=Ub;
function z(a,b,c,d){this.id=Xb+=2;this.b=null;this.J=a;this.mb=b;this.size=c||0;this.type=d||Yb;this.u=d==Zb;yb(this);this.Ca=this.gc=!1;if(c)if(rb)this.j=new ArrayBuffer(c),this.w=new DataView(this.j,0,c),this.g=new Uint8Array(this.j,0,c),this.A=new Uint16Array(this.j,0,c>>1),this.b=new Int32Array(this.j,0,c>>2),$b(this,Wb?ac:bc);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;$b(this,cc)}else $b(this)}k=z.prototype;
k.save=function(){var a,b;if(rb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.w.getInt32(b<<2,!0);else a=this.b;return a};k.restore=function(a){if(a&&this.size==a.length<<2){var b;if(rb)for(b=0;b<a.length;b++)this.w.setInt32(b<<2,a[b],!0);else this.b=a;return this.Ca=!0}return!1};function $b(a,b){b||(b=ec);fc(a,b,void 0);gc(a,b,void 0)}function fc(a,b,c){c&&a.H||(a.Xa=b[0]||a.jc,a.kc=b[2]||a.lc);if(c||void 0===c)a.lb=b[0]||a.jc,a.Jb=b[2]||a.lc}
function Sb(a,b,c,d){for(var e=1,f=0;0<e;){var g=a.B[b],h=a.T[b]||1,l=1==h?255:2==h?65535:-1,l=(c>>>=f)&l;if(void 0!==g){if(g[0])g[0](b,l,d);a.K&&a.F!=g[1]&&Tb(a.K,b,l)}else a.K&&(za(a.K,a,b,l,d),a.F&&Tb(a.K,b,l));f+=h<<3;b+=h;e-=h}}function Ab(a,b,c){q("Memory block error ("+a+": "+x(b)+","+x(c)+")");return!1}var Bb=1,Db=2,Ub;if(qb){var Vb=new ArrayBuffer(2);(new DataView(Vb)).setUint16(0,256,!0);Ub=256===(new Uint16Array(Vb))[0]}else Ub=!1;var Wb=Ub;
function z(a,b,c,d){this.id=Xb+=2;this.b=null;this.J=a;this.mb=b;this.size=c||0;this.type=d||Yb;this.u=d==Zb;yb(this);this.Ca=this.gc=!1;if(c)if(qb)this.j=new ArrayBuffer(c),this.w=new DataView(this.j,0,c),this.g=new Uint8Array(this.j,0,c),this.A=new Uint16Array(this.j,0,c>>1),this.b=new Int32Array(this.j,0,c>>2),$b(this,Wb?ac:bc);else{this.b=Array(c>>2);for(a=0;a<this.b.length;a++)this.b[a]=0;$b(this,cc)}else $b(this)}k=z.prototype;
k.save=function(){var a,b;if(qb)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.w.getInt32(b<<2,!0);else a=this.b;return a};k.restore=function(a){if(a&&this.size==a.length<<2){var b;if(qb)for(b=0;b<a.length;b++)this.w.setInt32(b<<2,a[b],!0);else this.b=a;return this.Ca=!0}return!1};function $b(a,b){b||(b=ec);fc(a,b,void 0);gc(a,b,void 0)}function fc(a,b,c){c&&a.H||(a.Xa=b[0]||a.jc,a.kc=b[2]||a.lc);if(c||void 0===c)a.lb=b[0]||a.jc,a.Jb=b[2]||a.lc}
function gc(a,b,c){c&&a.P||(a.Ya=!a.u&&b[1]||a.ob,a.nc=!a.u&&b[3]||a.Nb);if(c||void 0===c)a.nb=b[1]||a.ob,a.Ob=b[3]||a.Nb}k.Pa=function(a,b){b?this.P++||gc(this,hc,!1):this.H++||fc(this,hc,!1)};function rc(a,b){b?--a.P||(a.Ya=a.u?a.ob:a.nb,a.nc=a.u?a.Nb:a.Ob):--a.H||(a.Xa=a.lb,a.kc=a.Jb)}function yb(a,b,c){a.K=b;a.H=a.P=0;c&&((a.H=c.H)&&fc(a,hc,!1),(a.P=c.P)&&gc(a,hc,!1))}k.jc=function(){this.K&&wa(this.K,129)&&this.K.message("attempt to read invalid block %"+x(this.J),!0);return 255};
k.ob=function(a,b){this.K&&wa(this.K,129)&&this.K.message("attempt to write "+y(b)+" to invalid block %"+x(this.J),!0)};k.lc=function(a,b){return this.Xa(a++,b++)|this.Xa(a,b)<<8};k.Nb=function(a,b,c){this.Ya(a++,b&255,c++);this.Ya(a,b>>8,c)};k.Xd=function(a){return this.b[a>>2]>>>((a&3)<<3)&255};k.ae=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};k.fe=function(a,b){var c=a>>2;a=(a&3)<<3;this.b[c]=this.b[c]&~(255<<a)|b<<a;this.Ca=!0};
k.je=function(a,b){var c=a>>2;a=(a&3)<<3;24>a?this.b[c]=this.b[c]&~(65535<<a)|b<<a:(this.b[c]=this.b[c]&16777215|b<<24,c++,this.b[c]=this.b[c]&-256|b>>8);this.Ca=!0};k.Vd=function(a,b){if(this.K&&null!=this.J){var c=this.K;sc(c,this.J+a,1,c.I)&&c.da(!0)}return this.lb(a,b)};k.Zd=function(a,b){if(this.K&&null!=this.J){var c=this.K;sc(c,this.J+a,2,c.I)&&c.da(!0)}return this.Jb(a,b)};
k.de=function(a,b,c){if(this.K&&null!=this.J){var d=this.K;sc(d,this.J+a,1,d.w)&&d.da(!0)}this.u?this.ob(0,b):this.nb(a,b,c)};k.he=function(a,b,c){if(this.K&&null!=this.J){var d=this.K;sc(d,this.J+a,2,d.w)&&d.da(!0)}this.u?this.ob(0,b):this.Ob(a,b,c)};k.Ud=function(a){return this.g[a]};k.Wd=function(a){return this.g[a]};k.Yd=function(a){return this.w.getUint16(a,!0)};k.$d=function(a){return a&1?this.g[a]|this.g[a+1]<<8:this.A[a>>1]};k.ce=function(a,b){this.g[a]=b;this.Ca=!0};
k.ee=function(a,b){this.g[a]=b;this.Ca=!0};k.ge=function(a,b){this.w.setUint16(a,b,!0);this.Ca=!0};k.ie=function(a,b){a&1?(this.g[a]=b,this.g[a+1]=b>>8):this.A[a>>1]=b;this.Ca=!0};var Yb=0,Zb=2,Cb=["NONE","RAM","ROM","VID","H/W"],Xb=0,ec=[],cc=[z.prototype.Xd,z.prototype.fe,z.prototype.ae,z.prototype.je],hc=[z.prototype.Vd,z.prototype.de,z.prototype.Zd,z.prototype.he];if(rb)var bc=[z.prototype.Ud,z.prototype.ce,z.prototype.Yd,z.prototype.ge],ac=[z.prototype.Wd,z.prototype.ee,z.prototype.$d,z.prototype.ie];
k.ee=function(a,b){this.g[a]=b;this.Ca=!0};k.ge=function(a,b){this.w.setUint16(a,b,!0);this.Ca=!0};k.ie=function(a,b){a&1?(this.g[a]=b,this.g[a+1]=b>>8):this.A[a>>1]=b;this.Ca=!0};var Yb=0,Zb=2,Cb=["NONE","RAM","ROM","VID","H/W"],Xb=0,ec=[],cc=[z.prototype.Xd,z.prototype.fe,z.prototype.ae,z.prototype.je],hc=[z.prototype.Vd,z.prototype.de,z.prototype.Zd,z.prototype.he];if(qb)var bc=[z.prototype.Ud,z.prototype.ce,z.prototype.Yd,z.prototype.ge],ac=[z.prototype.Wd,z.prototype.ee,z.prototype.$d,z.prototype.ie];
function tc(a,b){n.call(this,"CPU",a,0,1);var c=a.multiplier||1;this.Fa=a.cycles||b;this.U=c;this.Sa=Math.round(this.Fa/1E4)/100;this.Z=this.Sa*this.U;this.G.ka=!1;this.G.Mb=!1;this.G.ib=a.autoStart;this.G.ec=!1;this.G.Va=!1;this.ya=this.oa=0;this.za=a.csStart;this.na=a.csInterval;this.sa=a.csStop;this.T=[];this.zb=this.qb.bind(this);sa(this)}ba(tc,n);k=tc.prototype;
k.Ea=function(a,b,c,d){this.S=a;this.H=b;this.K=d;for(b=0;b<uc.length;b++)(c=this.P[uc[b]])&&this.S.ca(null,uc[b],c);this.W=vb(a,"ChipSet");a=vc(a,"autoStart");null!=a&&(this.G.ib="true"==a?!0:"false"==a?!1:!!a);sa(this)};k.reset=function(){};k.save=function(){return null};k.restore=function(){return!1};
k.ua=function(a,b){if(!b){if(a&&this.restore){wc(this);if(!this.restore(a))return!1;xc(this)}else this.reset();this.K?(a=this.K,a.i("Type ? for help with PC8080 Debugger commands"),yc(a),a.ea&&(b=a.ea,a.ea=null,zc(a,b))):this.i("No debugger detected")}Ac(this);return!0};k.wa=function(a){return a?this.save():!0};k.ib=function(){return this.G.ib||!this.K&&void 0===this.P.run?(this.qb(),!0):!1};k.hc=function(){return 0};
@ -240,12 +240,12 @@ ic&&Ma!=a.T;){var qg=Xa[Ma++];if(null==qg.J)break;var jc=Wf(qg.J),ni=Aa--,rg=ih(
sg="",ma=hg(Xc.J);for(lc=16;0<lc&&0<$c;lc--){var bd=a.Ga(Xc,1),ad=ad|bd<<(me++<<3);me==Zc&&(ne+=x(ad,2*Zc),ne+=1==Zc?9==lc?"-":" ":" ",ad=me=0);sg+=32<=bd&&128>bd?String.fromCharCode(bd):".";$c--}kc&&(kc+="\n");kc+=ma+" "+ne+(lc?"":" "+sg)}kc&&a.i(kc);a.la=Xc}}}}break;case "e":if("else"==f[0])break;var cd=1,tg=255,ug=a.Ga,vg=a.Sb;"ew"==f[0]&&(cd=2,tg=65535,ug=a.Bb,vg=a.vc);var wg=cd<<1,xg=f[1];if(null==xg)a.i("edit memory commands:"),a.i("\teb [a] [...] edit bytes at address a"),a.i("\tew [a] [...] edit words at address a");
else{var dd=bg(a,xg);if(dd)for(var ed=2;ed<f.length;ed++){var mc=Nf(a,f[ed]);if(void 0===mc){a.i("unrecognized value: "+f[ed]);break}mc&~tg&&a.i("warning: "+x(mc)+" exceeds "+cd+"-byte value");var pi=ug.call(a,dd);a.i("changing "+hg(dd.J)+" from "+x(pi,wg,!0)+" to "+x(mc,wg,!0));vg.call(a,dd,mc,cd)}}break;case "f":Eh(a,f[1]);break;case "g":a:{var yg=f[1],qi=b;if(void 0!==yg){var oe=bg(a,yg,!0);if(!oe)break a;gg(a,oe,qi);a.Pa(a.j,oe,!0)}$g(a,!0)||c||a.i("cpu busy or unavailable, run command ignored")}break;
case "h":a:{var pe;if(a.G.ka)pe="halting",a.da();else{if(ua(a,!0))break a;pe="already halted"}c||a.i(pe)}break;case "i":if("if"==f[0]){var qe;var nc=b.substr(2),nc=Na(nc);Nf(a,nc)?(c||a.i("true: "+nc),qe=!0):(c||a.i("false: "+nc),qe=!1);qe||(d=!1);break}if("int"==f[0]){var fd;var ri=f[1];if(a.u.N&512){var re=Nf(a,ri);null==re?fd=!1:(a.i("requesting interrupt level "+re),Dd(a.u,re),fd=!0)}else a.i("interrupts disabled (use rif=1 to enable)"),fd=!1;fd||(d=!1);break}var se=f[1];if(se&&"?"!=se){var te=
Pf(a,se);if(void 0!==te){var si=Ob(a.H,te);a.i(y(te)+": "+Da(si))}}else a.i("input commands:"),a.i("\ti [p]\tread port [p]"),a.i("warning: port accesses can affect hardware state");break;case "k":var ti=f[0];if("?"==f[1])a.i("stack trace commands:"),a.i("\tk\tshow frame addresses"),a.i("\tks\tshow symbol information");else{var ue=0,zg=Wf(),oc=Wf(a.u.M);for(a.i("stack trace for "+hg(oc.J));10>ue;){for(var qb=null,ui=256;65536>oc.J>>>0;){zg.J=a.Bb(oc,2);if(null==oc.J||!ui--)break;for(var vi=a,gd=zg,
Ag=null,pc=gd.J,Bg=pc,ve=1;6>=ve&&pc;ve++){if(2<ve){gd.J=pc;var hd=ih(vi,gd);if(0<=hd.indexOf("CALL")){var Cg=hd.indexOf(" ");if(pc+(hd.indexOf(" ",Cg+1)-Cg-1)/2==Bg){Ag=hd;break}}}pc--}gd.J=Bg;if(qb=Ag)break}if(!qb||null==qb)break;var Dg=null;if("ks"==ti){var Eg=qb.match(/[0-9A-F]+$/);Eg&&(Dg=Gh(a,Eg[0]))}qb=Ka(qb,50)+" ;"+(Dg||"stack="+hg(oc.J));a.i(qb);ue++}ue||a.i("no return addresses found")}break;case "l":"ln"==f[0]&&Gh(a,f[1],!0);break;case "m":a:{var Ya,Za=null,aa=f[1];"?"==aa&&(aa=void 0);
Pf(a,se);if(void 0!==te){var si=Ob(a.H,te);a.i(y(te)+": "+Da(si))}}else a.i("input commands:"),a.i("\ti [p]\tread port [p]"),a.i("warning: port accesses can affect hardware state");break;case "k":var ti=f[0];if("?"==f[1])a.i("stack trace commands:"),a.i("\tk\tshow frame addresses"),a.i("\tks\tshow symbol information");else{var ue=0,zg=Wf(),oc=Wf(a.u.M);for(a.i("stack trace for "+hg(oc.J));10>ue;){for(var rb=null,ui=256;65536>oc.J>>>0;){zg.J=a.Bb(oc,2);if(null==oc.J||!ui--)break;for(var vi=a,gd=zg,
Ag=null,pc=gd.J,Bg=pc,ve=1;6>=ve&&pc;ve++){if(2<ve){gd.J=pc;var hd=ih(vi,gd);if(0<=hd.indexOf("CALL")){var Cg=hd.indexOf(" ");if(pc+(hd.indexOf(" ",Cg+1)-Cg-1)/2==Bg){Ag=hd;break}}}pc--}gd.J=Bg;if(rb=Ag)break}if(!rb||null==rb)break;var Dg=null;if("ks"==ti){var Eg=rb.match(/[0-9A-F]+$/);Eg&&(Dg=Gh(a,Eg[0]))}rb=Ka(rb,50)+" ;"+(Dg||"stack="+hg(oc.J));a.i(rb);ue++}ue||a.i("no return addresses found")}break;case "l":"ln"==f[0]&&Gh(a,f[1],!0);break;case "m":a:{var Ya,Za=null,aa=f[1];"?"==aa&&(aa=void 0);
if(void 0!==aa){var jb=0;if("all"==aa)jb=1878917119,aa=null;else if("on"==aa)Za=!0,aa=null;else if("off"==aa)Za=!1,aa=null;else{"keys"==aa&&(aa="key");"kbd"==aa&&(aa="keyboard");for(Ya in tb)if(aa==Ya){jb=tb[Ya];Za=!!(a.ha&jb);break}if(!jb){a.i("unknown message category: "+aa);break a}}if(jb)if("on"==f[2])a.ha|=jb,Za=!0;else if("off"==f[2]&&(a.ha&=~jb,Za=!1,1073741824==jb)){for(var we=0;we<a.X.length;we++)a.i(a.X[we]);a.X=[]}}var wi=0,qc="";for(Ya in tb)if(!aa||aa==Ya){var xi=!!(a.ha&tb[Ya]);if(null===
Za||Za==xi)qc&&(qc+=","),++wi%10||(qc+="\n\t"),"key"==Ya&&(Ya="keys"),qc+=Ya}void 0===aa&&a.i("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.i((null!==Za?Za?"messages on: ":"messages off: ":"message categories:\n\t")+(qc||"none"));Yf(a)}break;case "o":var xe=f[1],yi=f[2];if(xe&&"?"!=xe){var ye=Pf(a,xe,"port #"),ze=Pf(a,yi);void 0!==ye&&void 0!==ze&&(Sb(a.H,ye,ze),a.i(y(ye)+": "+Da(ze)))}else a.i("output commands:"),a.i("\to [p] [b]\twrite byte [b] to port [p]"),a.i("warning: port accesses can affect hardware state");
break;case "p":if("print"==f[0]){Ih(a,b.substr(5));break}var Fg="pr"==f[0]?1:0,zi=1+Fg;if(a.M)a.i("step in progress");else{var Ae=Wf(a.u.j);switch(a.Ga(Ae)){case 205:a.M=zi,dg(Ae,3)}a.M?(a.Pa(a.j,Ae,!0),$g(a)||(a.S&&Hc(a.S),a.M=0)):Jh(a,Fg?"tr":"t")}break;case "r":if("reset"==b){a.S&&a.S.reset();break}bh(a,f);break;case "s":Hh(a,f);break;case "t":Jh(a,f[0],f[1]);break;case "u":ch(a,f[1],f[2],8);break;case "v":if("var"==f[0]){Fh(a,b.substr(3))||(d=!1);break}a.i("PC8080 version 1.32.0 ("+a.u.tb+",RELEASE"+
(rb?",TYPEDARRAYS":",LONGARRAYS")+")");a.i(Ua());break;case "?":if(f[1]){Ih(a,b.substr(1));break}var Be="commands:",Ce;for(Ce in Lh)Be+="\n"+Ka(Ce,9)+Lh[Ce];Ed(a)||(Be+="\nnote: frequency/history disabled if no exec breakpoints");a.i(Be);break;default:a.i("unknown command: "+b),d=!1}}}catch(Hg){a.i("debugger error: "+(Hg.stack||Hg.message)),d=!1}return d}function zc(a,b,c){b=a.wb(b,c);for(var d in b)if(!hh(a,b[+d]))return!1;return!0}
(qb?",TYPEDARRAYS":",LONGARRAYS")+")");a.i(Ua());break;case "?":if(f[1]){Ih(a,b.substr(1));break}var Be="commands:",Ce;for(Ce in Lh)Be+="\n"+Ka(Ce,9)+Lh[Ce];Ed(a)||(Be+="\nnote: frequency/history disabled if no exec breakpoints");a.i(Be);break;default:a.i("unknown command: "+b),d=!1}}}catch(Hg){a.i("debugger error: "+(Hg.stack||Hg.message)),d=!1}return d}function zc(a,b,c){b=a.wb(b,c);for(var d in b)if(!hh(a,b[+d]))return!1;return!0}
var Lh={"?":"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","int [#]":"request interrupt",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"},
Vf=8080,jh=8086,kh="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(" "),lh="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(" "),
Kg=0,Lg=1,Mg=2,Ng=3,Og=4,Pg=5,Qg=6,Jg=7,Rg=8,Sg=9,Tg=10,Ug=11,Vg=12,Wg=13,Xg=14,Gg="B C D E H L M A BC DE HL SP PC PS PSW".split(" "),oh=15,nh=240,wh=3840,ph=61440,mh=0,Q=1,sh=2,th=3,vh=16,P=32,uh=64,xh=128,R=Jg<<8|vh|Q,T=Kg<<8|vh|Q,U=Lg<<8|vh|Q,V=Mg<<8|vh|Q,W=Ng<<8|vh|Q,X=Og<<8|vh|Q,Y=Pg<<8|vh|Q,Z=Qg<<8|vh|Q|uh,Mh=Rg<<8|vh|th,Nh=Sg<<8|vh|th,Oh=Tg<<8|vh|th,Ph=Ug<<8|vh|th,Qh=Xg<<8|vh|th,rh=4096,qh=8192,O=16384,yh=32768,$f=[[45],[42,Mh,P],[71,Mh|uh,R|O],[29,Mh],[28,T],[22,T],[44,T,P],[63],[45,yh],[21,
@ -286,4 +286,4 @@ function Hi(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=
a=a.replace(d[0],g);Hi(a,b,c)}})}else c(a,null)}
function Ii(a,b,c,d){function e(a){if(void 0===h){var b=g&&pa(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=Ia(a))}function f(a){e("Error: "+a);l&&(--Ei||mb(!0));l=!1}var g,h,l=!0;Ei++;ea[a]={};try{if(g=document.getElementById(a)){var p;if("object"==typeof resources&&(p=resources.css)){var r=document.head||document.getElementsByTagName("head")[0],t=document.createElement("style");t.type="text/css";t.styleSheet?t.styleSheet.cssText=p:t.appendChild(document.createTextNode(p));r.appendChild(t)}c||
(c="/versions/pc8080/1.32.0/components.xsl");p=function(d,h){h?Fi(c,null,null,!1,e,function(d,l){l?(da(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window?(l=h.transformNode(l))?(g.outerHTML=l,--Ei||mb(!0)):f("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(d=new XSLTProcessor,d.importStylesheet(l),(l=d.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--Ei||mb(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(d)}):f(d)};"<"!=b.charAt(0)?Fi(b,a,d,!0,e,p):Gi(b,null,a,d,!1,e,p)}else f("missing machine element: "+a)}catch(A){f(A.message)}return l}window.embedPC8080=function(a,b,c,d){mb(!1);return Ii(a,b,c,d)};window.enableEvents=mb;window.sendEvent=ob;})();
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(d)}):f(d)};"<"!=b.charAt(0)?Fi(b,a,d,!0,e,p):Gi(b,null,a,d,!1,e,p)}else f("missing machine element: "+a)}catch(A){f(A.message)}return l}window.embedPC8080=function(a,b,c,d){mb(!1);return Ii(a,b,c,d)};window.findMachineComponent=function(a,b){return la(b,a+".machine")};window.enableEvents=mb;window.sendEvent=ob;})();

View file

@ -206,4 +206,4 @@ function xe(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=
a=a.replace(d[0],g);xe(a,b,c)}})}else c(a,null)}
function ye(a,b,c,d){function e(a){if(void 0===h){var b=g&&y(g,"machine-warning");h=b&&b[0]||g}h&&(h.innerHTML=ra(a))}function f(a){e("Error: "+a);l&&(--ue||La(!0));l=!1}var g,h,l=!0;ue++;ba[a]={};try{if(g=document.getElementById(a)){var n;if("object"==typeof resources&&(n=resources.css)){var v=document.head||document.getElementsByTagName("head")[0],A=document.createElement("style");A.type="text/css";A.styleSheet?A.styleSheet.cssText=n:A.appendChild(document.createTextNode(n));v.appendChild(A)}c||
(c="/versions/pc8080/1.32.0/components.xsl");n=function(d,h){h?ve(c,null,null,!1,e,function(d,l){l?(aa(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window?(l=h.transformNode(l))?(g.outerHTML=l,--ue||La(!0)):f("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(d=new XSLTProcessor,d.importStylesheet(l),(l=d.transformToFragment(h,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--ue||La(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(d)}):f(d)};"<"!=b.charAt(0)?ve(b,a,d,!0,e,n):we(b,null,a,d,!1,e,n)}else f("missing machine element: "+a)}catch(K){f(K.message)}return l}window.embedPC8080=function(a,b,c,d){La(!1);return ye(a,b,c,d)};window.enableEvents=La;window.sendEvent=Na;})();
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(d)}):f(d)};"<"!=b.charAt(0)?ve(b,a,d,!0,e,n):we(b,null,a,d,!1,e,n)}else f("missing machine element: "+a)}catch(K){f(K.message)}return l}window.embedPC8080=function(a,b,c,d){La(!1);return ye(a,b,c,d)};window.findMachineComponent=function(a,b){return ia(b,a+".machine")};window.enableEvents=La;window.sendEvent=Na;})();

View file

@ -57,12 +57,12 @@ function bb(a,b,c,d){c=void 0===c?!1:c;var e=0,f=null,g=null;if("object"==typeof
f,e))});if(b&&"object"==typeof b){var l="",m;for(m in b)b.hasOwnProperty(m)&&(l&&(l+="&"),l+=m+"="+encodeURIComponent(b[m]));l=l.replace(/%20/g,"+");k.open("POST",a,c);k.setRequestHeader("Content-type","application/x-www-form-urlencoded");k.send(l)}else k.open("GET",a,c),"bytes"==b&&k.overrideMimeType("text/plain; charset=x-user-defined"),k.send();c||(f=k.responseText,200!=k.status&&(e=k.status||-1),d&&d(a,f,e),g=[f,e]);return g}
function cb(a,b){var c,d={ca:null,ea:null,wa:null,va:null};if("["==b.charAt(0)||"{"==b.charAt(0))try{var e,f,g;if("<"==b.substr(0,1))throw Error(b);g=0>b.indexOf("0x")&&'["'!=b.substr(0,2)?JSON.parse(b.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+b+")");d.wa=g.load;d.va=g.exec;if(e=g.bytes)d.ca=e;else if(e=g.words)for(d.ca=Array(2*e.length),f=c=0;c<e.length;c++)d.ca[f++]=e[c]&255,d.ca[f++]=e[c]>>8&255;else if(e=g.data)for(d.ca=Array(4*e.length),f=c=0;c<e.length;c++)d.ca[f++]=
e[c]&255,d.ca[f++]=e[c]>>8&255,d.ca[f++]=e[c]>>16&255,d.ca[f++]=e[c]>>24&255;else d.ca=g;d.ea=g.symbols;d.ca.length?1==d.ca.length&&(v(d.ca[0]),d=null):(v("Empty resource: "+a),d=null)}catch(k){v("Resource data error ("+a+"): "+k.message),d=null}else{e=[];b=b.replace(/\n/gm," ").replace(/ +$/,"").split(" ");for(c=0;c<b.length;c++){f=parseInt(b[c],16);if(isNaN(f)){v("Resource data error ("+a+"): invalid hex byte ("+b[c]+")");break}e.push(f&255)}c==b.length&&(d.ca=e)}return d}
function db(){return"http://"+(window?window.location.host:"www.pcjs.org")}function eb(){if(null==gb){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}gb=a}return gb}function mb(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
function db(){return"http://"+(window?window.location.host:"www.pcjs.org")}function eb(){if(null==fb){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}fb=a}return fb}function hb(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
function nb(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function ob(a){if(window){var b=window?window.navigator.userAgent:"";return"iOS"==a&&!!b.match(/(iPod|iPhone|iPad)/)&&!!b.match(/AppleWebKit/)||"MSIE"==a&&!!b.match(/(MSIE|Trident)/)||0<=b.indexOf(a)}return!1}
function pb(a){if(!qb){var b,c={};if(window){b||(b=window.location.search.substr(1));for(var d,e=/\+/g,f=/([^&=]+)=?([^&]*)/g;d=f.exec(b);)c[decodeURIComponent(d[1].replace(e," "))]=decodeURIComponent(d[2].replace(e," "))}qb=c}return qb[a]}
function rb(a,b){var c=null;a="data:application/octet-stream;base64,"+a;b&&(c=document.createElement("a"),"string"!=typeof c.download&&(c=null));c?(c.href=a,c.download=b,document.body.appendChild(c),c.click(),document.body.removeChild(c),b="Check your Downloads folder for "+b+"."):(window.open(a),b="Check your browser for a new window/tab containing the requested data"+(b?" ("+b+")":"")+".");return b}function sb(a,b,c){function d(){--a;0<=a&&(b()||(a=0));0<a?setTimeout(d,0):c()}d()}
function tb(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}}function ub(a,b){if(window){var c=window[a];window[a]="function"!==typeof c?b:function(){c&&c();b()}}}function vb(a){wb.init.push(a)}
function xb(a){if(yb)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){v(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function zb(a){!yb&&a?(yb=!0,Ab&&Bb("init"),Cb&&Bb("show")):yb=a}function Bb(a){wb[a]&&xb(wb[a])}var qb=null,wb={init:[],show:[],exit:[]},Ab=!1,Cb=!1,yb=!0,gb=null;ub("onload",function(){Ab=!0;xb(wb.init)});ub("onpageshow",function(){Cb=!0;xb(wb.show)});ub(ob("Opera")||ob("iOS")?"onunload":"onbeforeunload",function(){xb(wb.exit)});
function xb(a){if(yb)try{for(var b=0;b<a.length;b++)a[b]()}catch(c){v(""+("An unexpected exception occurred:\n\n"+c.message+"\n\nPlease send this information to support@pcjs.org. Thanks."))}}function zb(a){!yb&&a?(yb=!0,Ab&&Bb("init"),Cb&&Bb("show")):yb=a}function Bb(a){wb[a]&&xb(wb[a])}var qb=null,wb={init:[],show:[],exit:[]},Ab=!1,Cb=!1,yb=!0,fb=null;ub("onload",function(){Ab=!0;xb(wb.init)});ub("onpageshow",function(){Cb=!0;xb(wb.show)});ub(ob("Opera")||ob("iOS")?"onunload":"onbeforeunload",function(){xb(wb.exit)});
var Db="undefined"!==typeof ArrayBuffer,x="pdp11",Eb="PDPjs",Fb=!1,Gb=Db,Nb=!0,Ob=!0,Pb="UNKNOWN PANIC ABORT ILLEGAL RED YELLOW FAULT TRACE HALT OPCODE INTERRUPT".split(" "),Qb={48:"DL11R",52:"DL11X",56:"PC11R",60:"PC11X",64:"KW11",112:"RL11",144:"RK11"},x="pdp11",Eb="PDPjs",Fb=!1,Gb=Db,Ob=Nb=!0,Rb={cpu:1,trap:2,fault:4,"int":8,bus:16,memory:32,mmu:64,rom:128,device:256,panel:512,keyboard:1024,key:2048,pc11:4096,paper:4096,disk:8192,read:16384,write:32768,rk11:65536,rl11:131072,dl11:262144,serial:262144,
kw11:524288,timer:524288,speaker:16777216,computer:33554432,log:268435456,warn:536870912,buffer:1073741824,halt:-2147483648};
function Sb(a,b){q.call(this,"Panel",a,0,512);this.j=this.v=0;this.I=b;this.ua=this.i=this.Ya=this.vb=0;this.B=this.G=this.w=!1;this.H=Tb;this.g={};this.b={START:[1,1,!0,!1,this.Xd],STEP:[1,1,!1,!1,this.Yd],ENABLE:[1,1,!1,!1,this.Td],CONT:[1,1,!0,!1,this.Rd],DEP:[0,0,!0,!1,this.Sd],EXAM:[1,1,!0,!1,this.Ud],LOAD:[1,1,!0,!1,this.Wd],TEST:[0,0,!0,!1,this.Vd]};for(a=0;22>a;a++)this.b["S"+a]=[0,0,!1,!1,this.Zd,a];this.F=this.f=this.D=this.J=null;A(this)}p(Sb,q);h=Sb.prototype;h.reset=function(){this.stop()};
@ -215,7 +215,7 @@ function Vh(a,b,c,d,e,f,g){a.L=b;a.j=c;a.i=d;a.ca=e;a.wa=f;a.va=g;d==Gh?a.I&&wh(
h.Cf=function(a){a&1&&(this.b&32768?(a&=-2,this.b&64&&hd(this.f,this.H)):(this.b&=-129,this.b|=2048,this.G=0,id(this.f,this.R,1E3/Math.round(this.S/10))));this.b=this.b&-66|a&65};h.re=function(){this.b&=-129;this.b|=2048;return this.G};h.Bf=function(){};var Eh="",Oh="?",Ph="??",Fh=0,Hh=1,Gh=2,Jh="readProgress",Wh="pcjs-progress-bar",Xh={},Mh=(Xh[65384]=[null,null,Ed.prototype.se,Ed.prototype.Cf,"PRS"],Xh[65386]=[null,null,Ed.prototype.re,Ed.prototype.Bf,"PRB"],Xh);
function Yh(a,b,c){q.call(this,"Disk",{id:a.lb+".disk"+H(++Zh,4)},0,8192);this.controller=a;this.J=a.J;this.F=a.F;this.v=b;this.Na=b.name;this.Aa=this.gc="";this.cc=b.cc;this.X=this.da=this.aa=this.oa=this.mode=0;this.b=[];this.i=null;this.j=!1;$h(this,c,b.X,b.da,b.aa,b.oa);this.g=this.w=null;A(this)}p(Yh,q);h=Yh.prototype;h.ta=function(a,b,c,d){this.F=d};
function $h(a,b,c,d,e,f){a.mode=b;a.X=c;a.da=d;a.aa=e;a.oa=f;a.b=[];if("preload"!=a.mode){b=Array(a.X);for(c=0;c<b.length;c++){d=Array(a.da);for(e=0;e<d.length;e++){f=Array(a.aa);for(var g=1;g<=f.length;g++)f[g-1]=ai(null,c,e,g,a.oa,0);d[e]=f}b[c]=d}a.b=b}a.i=null}
function bi(a,b,c,d,e){var f=c;if(a.g)return!0;a.Na=b;a.Aa=c;a.gc=Pa(c);a.g=e;a.w=a.controller;if(d){var g=new FileReader;g.onload=function(){var b=g.result,c,d=b?b.byteLength:0,e=ra[d];if(e){a.X=e[0];a.da=e[1];a.aa=e[2];a.oa=e[3]||512;c=a.oa>>2;var f=e=0,b=new DataView(b,0,d);a.b=Array(a.X);for(d=0;d<a.b.length;d++)for(var u=a.b[d]=Array(a.da),t=0;t<u.length;t++)for(var E=u[t]=Array(a.aa),z=0;z<E.length;z++){for(var D=ai(null,d,t,z+1,a.oa,0),F=D.data,fb=0;fb<c;fb++,f+=4)var W=F[fb]=b.getInt32(f,
function bi(a,b,c,d,e){var f=c;if(a.g)return!0;a.Na=b;a.Aa=c;a.gc=Pa(c);a.g=e;a.w=a.controller;if(d){var g=new FileReader;g.onload=function(){var b=g.result,c,d=b?b.byteLength:0,e=ra[d];if(e){a.X=e[0];a.da=e[1];a.aa=e[2];a.oa=e[3]||512;c=a.oa>>2;var f=e=0,b=new DataView(b,0,d);a.b=Array(a.X);for(d=0;d<a.b.length;d++)for(var u=a.b[d]=Array(a.da),t=0;t<u.length;t++)for(var E=u[t]=Array(a.aa),z=0;z<E.length;z++){for(var D=ai(null,d,t,z+1,a.oa,0),F=D.data,gb=0;gb<c;gb++,f+=4)var W=F[gb]=b.getInt32(f,
!0),e=e+W&-1;D.Ja=c;E[z]=D}a.i=e;c=a}else a.O("Unrecognized disk format ("+d+" bytes)");a.g&&(a.g.call(a.controller,a.v,c,a.Na,a.Aa),a.g=null)};g.readAsArrayBuffer(d);return!0}0>c.indexOf("/api/v1/dump")&&(b=Qa(c),"json"==b||"gz"==b?f=encodeURI(c):(d="path",e="&mbhd=10",!c.indexOf("http:")||!c.indexOf("ftp:")||0<="dsk ima img 360 720 12 144".split(" ").indexOf(b)?(d="disk",e="&mbhd=0"):Ra(c,"/")&&(d="dir"),f=db()+"/api/v1/dump?"+d+"="+encodeURIComponent(c)+(a.cc?"":e)+"&format=json"));return!!bb(f,
null,!0,function(b,c,d){ci(a,b,c,d)})}
function ci(a,b,c,d){var e=null,f=0>d&&!!a.J&&!a.J.A.fa;a.j=!1;if(d)a.controller.O('Unable to load disk "'+a.Na+'" (error '+d+": "+b+")",f);else{ua(a.controller.lb,b,c);try{if(0<Pa(a.gc,!0).toLowerCase().indexOf("-readonly"))a.j=!0;else{var g=c.indexOf("\n");0<g&&1024>g&&0<c.substring(0,g).indexOf("write-protected")&&(a.j=!0)}var k;"<"==c.substr(0,1)?k=["Missing disk image: "+a.Na]:k=0>c.indexOf("0x")&&'["'!=c.substr(0,2)?JSON.parse(c.replace(/([a-z]+):/gm,'"$1":').replace(/\/\/[^\n]*/gm,"")):eval("("+
@ -317,17 +317,17 @@ function qk(a,b,c){if("?"==c)a.u("trace commands:"),a.u("\tt [#]\ttrace # instr
function Qj(a,b,c,d){if(b=vj(a,b,!0)){void 0===d&&(d=1);var e=256;if(void 0!==c)if("l"==c.charAt(0))c=hj(a,c.substr(1)),null!=c&&(d=c);else{d=vj(a,c,!0);if(!d||d.K<b.K)return;e=d.K-b.K;if(256<e){a.u("range too large");return}d=-1}c=0;for(var f;0<e&&d--;){f=Ka(a,!1)||a.I?a.w:null;var g=null!=f?"cycles":null,k=lk(a,b),l=b.K;if(k[0]&&d&&(!c&&d||0>k[0].indexOf("+"))){var m=k[0]+":";k[2]&&(m+=" "+k[2]);a.u(m)}k[3]&&(g=k[3],f=null);f=Xj(a,b,g,f);a.u(f);a.H=b;e-=b.K-l;c++}}}
function Wj(a,b,c){var d=!0;try{b.length&&"end"!=b?c||a.u(">> "+b):(a.P&&(a.u("ended assemble at "+yj(a,a.N)),a.H=a.N,a.P=!1),b="");var e=b.charAt(0);if('"'==e||"'"==e)return!0;a.S=null;if(Ja(a)&&0<b.length){a.P&&(b="a "+yj(a,a.N)+" "+b);var f=!1,g=b.replace(/ +/g," ").split(" ");g[0]=g[0].toLowerCase();if(g&&g.length)for(var k=g[0],l=k.charAt(0),m=1;m<k.length;m++){var n=k.charAt(m);if("?"==l||"r"==l||"a">n||"z"<n){g[0]=k.substr(m);g.unshift(k.substr(0,m));break}}switch(g[0].charAt(0)){case "a":var r=
vj(a,g[1],!0);if(r)if(a.N=r,void 0===g[2])a.u("begin assemble at "+yj(a,r)),a.P=!0,J(a.J);else{var u;a.u("not supported yet");u=[];if(u.length){for(var t=0;t<u.length;t++)a.Nc(r,u[t],1);a.u(Xj(a,a.N))}}break;case "b":a:{var E=g[0],z=g[1],D=b;if("?"==z)a.u("breakpoint commands:"),a.u("\tbp [#]\tset exec breakpoint at addr #"),a.u("\tbr [#]\tset read breakpoint at addr #"),a.u("\tbw [#]\tset write breakpoint at addr #"),a.u("\tbc [#]\tclear breakpoint at addr #"),a.u("\tbl\tlist all breakpoints"),a.u("\tbn [#]\tbreak after # instruction(s)");
else{var F=E.charAt(1);if("l"==F){var fb;fb=0+Vj(a,a.g);fb+=Vj(a,a.L);(fb+=Vj(a,a.G))||a.u("no breakpoints")}else if("n"==F)a.ba=hj(a,z),a.u("break after "+a.ba+" instruction(s)");else if(void 0===z)a.u("missing breakpoint address");else{var W=V();if("*"!=z&&(W=vj(a,z,!0),!W))break a;"c"==F?null==W.K?(mj(a),a.u("all breakpoints cleared")):Tj(a,a.g,W)||Tj(a,a.L,W)||Tj(a,a.G,W)||a.u("breakpoint missing: "+yj(a,W)):null!=W.K&&(xj(a,W,D),"p"==F?a.pb(a.g,W):"r"==F?a.pb(a.L,W):"w"==F?a.pb(a.G,W):a.u("unknown breakpoint command: "+
else{var F=E.charAt(1);if("l"==F){var gb;gb=0+Vj(a,a.g);gb+=Vj(a,a.L);(gb+=Vj(a,a.G))||a.u("no breakpoints")}else if("n"==F)a.ba=hj(a,z),a.u("break after "+a.ba+" instruction(s)");else if(void 0===z)a.u("missing breakpoint address");else{var W=V();if("*"!=z&&(W=vj(a,z,!0),!W))break a;"c"==F?null==W.K?(mj(a),a.u("all breakpoints cleared")):Tj(a,a.g,W)||Tj(a,a.L,W)||Tj(a,a.G,W)||a.u("breakpoint missing: "+yj(a,W)):null!=W.K&&(xj(a,W,D),"p"==F?a.pb(a.g,W):"r"==F?a.pb(a.L,W):"w"==F?a.pb(a.G,W):a.u("unknown breakpoint command: "+
F))}}}break;case "c":a.Pa&&(a.Pa.value="");break;case "d":a:{var Hb,Ta=g[0],Fa=g[1],Ua=g[2],Qk=g[3];if("?"==Fa){var Ib="";for(Hb in Rb)a.la[Hb]&&(Ib&&(Ib+=","),Ib+=Hb);Ib+=",state,symbols";a.u("dump memory commands:");a.u("\tda [a] dump info for address a");a.u("\tdb [a] [n] dump n bytes at address a");a.u("\tdw [a] [n] dump n words at address a");a.u("\tdd [a] [n] dump n dwords at address a");a.u("\tds [a] [n] dump n words at address a as JSON");a.u("\tdh [p] [n] dump n instructions from history position p");
Ib.length&&a.u("dump extension commands:\n\t"+Ib)}else if("state"==Fa){var Ne=rk(a.J,!0);"console"==Ua?console.log(Ne):(a.Pa&&(a.Pa.value=""),Ne&&a.u(Ne))}else if("symbols"==Fa)for(var Oe=0;Oe<a.B.length;Oe++){var Pe=a.B[Oe],Jb;for(Jb in Pe.ea)if("."!=Jb.charAt(0)){var ji=Pe.ea[Jb].o;if(void 0!==ji){var ki=Pe.ea[Jb].l;ki&&(Jb=ki);a.u(O(a,ji)+" "+Jb)}}}else{if("d"==Ta){for(Hb in Rb)if(g[1]==Hb){var li=a.la[Hb];li?(g.shift(),g.shift(),li(g)):a.u("no dump registered for "+Fa);break a}Fa||(Ta=a.Ha||"dw")}else a.Ha=
Ta;if("dh"==Ta){var mi=Fa,ni=Ua,oi="",pi=0,wa=a.R,Ga=a.i;if(Ga.length){var qa=+mi||a.na,rc=+ni||10;isNaN(qa)?qa=rc:oi="more ";qa>Ga.length&&(a.u("note: only "+Ga.length+" available"),qa=Ga.length);wa-=qa;0>wa&&(null==Ga[Ga.length-1].K?(qa=wa+qa,wa=0):wa+=Ga.length);var Qe=[];"call"==ni&&(rc=1E5,Qe=["CALL"]);for(void 0!==mi&&a.u(qa+" instructions earlier:");0<rc&&wa!=a.R;){var qi=Ga[wa++];if(null==qi.K)break;var sc=V(qi.K),Rk=qa--,ri=Xj(a,sc,"history",Rk);(!Qe.length||0<=ri.indexOf(Qe[0]))&&a.u(ri);
sc.Ac&&(wa+=sc.Ac,rc-=sc.Ac,qa-=sc.Ac);wa>=Ga.length&&(wa=0);a.na=qa;pi++;rc--}}pi||(a.u("no "+oi+"history available"),a.na=void 0)}else{var fa=vj(a,Fa);if(fa)if("da"==Ta){var Re=fa.Ka||65535<fa.K,K=Fe(a.f,fa.K||0,Re);a.u(Xa("",Re?12:19)+Na(fa.K,Re?22:17,3)+" "+G(fa.K,8));6>K.length?(2<K.length&&(a.u(" OFFSET: "+Na(K[3],13,3)+" "+G(K[3],8)),a.u("UNIMAP["+Oa(K[1])+"]: "+Na(K[2],22,3)+" "+G(K[2],8))),a.u(" PHYSICAL: "+Na(K[0],22,3)+" "+G(K[0],8))):(a.u(" OFFSET: "+
Na(K[1],13,3)+" "+G(K[1],8)),a.u("+ "+sk[K[2]]+"PAR"+K[3]+": "+Na(K[4],22,3)+" "+G(K[4],8)),a.u("& MMUMASK: "+Na(K[5],22,3)+" "+G(K[5],8)),a.u("= PHYSICAL: "+Na(K[0],22,3)+" "+G(K[0],8)))}else{var hb=0,Se="ds"==Ta;if(Ua){if("l"==Ua.charAt(0))Ua=Ua.substr(1)||Qk,hb=hj(a,Ua);else{var si=vj(a,Ua);si&&(hb=si.K-fa.K)}0>hb&&(hb=0);65536<hb&&(hb=65536)}var Tk=a.xa;fa.xa&&(a.xa=fa.xa);for(var ib="dd"==Ta?4:"db"==Ta?1:2,wd=ib*hb||128,Te=Se?16:a.xa,Uk=(wd+Te-1)/Te|0||1,jb="";Uk--&&0<wd;){for(var kb=
"",Ue="",Fa=yj(a,fa),xd=Te,tc=0,uc=0;0<xd&&0<wd;){var Kb=1,yd=1==ib?a.Mc(fa,Kb):a.Oa(fa,Kb=2),tc=tc|yd<<(uc<<3),uc=uc+Kb;uc==ib&&(Se?(kb&&(kb+=","),kb+="0x"+H(tc,2*ib)):(kb+=O(a,tc,ib),kb+=1==ib?9==xd?"-":" ":" "),tc=uc=0);xd-=Kb;for(wd-=Kb;1==ib&&Kb--;)var Ve=yd&255,Ue=Ue+(32<=Ve&&128>Ve?String.fromCharCode(Ve):"."),yd=yd>>8}jb&&(jb+="\n");jb=Se?jb+(kb+","):jb+(Fa+": "+kb+(xd?"":" "+Ue))}jb&&a.u(jb);a.Ca=fa;a.xa=Tk}}}}break;case "e":if("else"==g[0])break;var Lb,We,Xe,Ye,Ze=g[0],$e=g[1];"eb"==Ze?
Na(K[1],13,3)+" "+G(K[1],8)),a.u("+ "+sk[K[2]]+"PAR"+K[3]+": "+Na(K[4],22,3)+" "+G(K[4],8)),a.u("& MMUMASK: "+Na(K[5],22,3)+" "+G(K[5],8)),a.u("= PHYSICAL: "+Na(K[0],22,3)+" "+G(K[0],8)))}else{var ib=0,Se="ds"==Ta;if(Ua){if("l"==Ua.charAt(0))Ua=Ua.substr(1)||Qk,ib=hj(a,Ua);else{var si=vj(a,Ua);si&&(ib=si.K-fa.K)}0>ib&&(ib=0);65536<ib&&(ib=65536)}var Tk=a.xa;fa.xa&&(a.xa=fa.xa);for(var jb="dd"==Ta?4:"db"==Ta?1:2,wd=jb*ib||128,Te=Se?16:a.xa,Uk=(wd+Te-1)/Te|0||1,kb="";Uk--&&0<wd;){for(var lb=
"",Ue="",Fa=yj(a,fa),xd=Te,tc=0,uc=0;0<xd&&0<wd;){var Kb=1,yd=1==jb?a.Mc(fa,Kb):a.Oa(fa,Kb=2),tc=tc|yd<<(uc<<3),uc=uc+Kb;uc==jb&&(Se?(lb&&(lb+=","),lb+="0x"+H(tc,2*jb)):(lb+=O(a,tc,jb),lb+=1==jb?9==xd?"-":" ":" "),tc=uc=0);xd-=Kb;for(wd-=Kb;1==jb&&Kb--;)var Ve=yd&255,Ue=Ue+(32<=Ve&&128>Ve?String.fromCharCode(Ve):"."),yd=yd>>8}kb&&(kb+="\n");kb=Se?kb+(lb+","):kb+(Fa+": "+lb+(xd?"":" "+Ue))}kb&&a.u(kb);a.Ca=fa;a.xa=Tk}}}}break;case "e":if("else"==g[0])break;var Lb,We,Xe,Ye,Ze=g[0],$e=g[1];"eb"==Ze?
(Lb=1,We=255,Xe=a.Mc,Ye=a.Nc):"e"==Ze||"ew"==Ze?(Lb=2,We=65535,Xe=a.Oa,Ye=a.yd):$e=null;if(null==$e)a.u("edit memory commands:"),a.u("\teb [a] [...] edit bytes at address a"),a.u("\tew [a] [...] edit words at address a");else{var zd=vj(a,$e);if(zd)for(var Ad=2;Ad<g.length;Ad++){var vc=fj(a,g[Ad]);if(void 0===vc){a.u("unrecognized value: "+g[Ad]);break}vc&~We&&a.u("warning: "+H(vc)+" exceeds "+Lb+"-byte value");a.u("changing "+yj(a,zd)+(B(a,16)?"":" from "+O(a,Xe.call(a,zd),Lb))+" to "+O(a,vc,Lb));
Ye.call(a,zd,vc,Lb)}}break;case "g":a:{var ti=g[1],Vk=b;if(void 0!==ti){var af=vj(a,ti,!0);if(!af)break a;xj(a,af,Vk);a.pb(a.g,af,!0)}Nj(a,!0,c)}break;case "h":a.A.U?(c||a.u("halting"),a.Z()):Ka(a,!0)||c||a.u("already halted");break;case "i":if("if"==g[0]){var bf;var wc=b.substr(2),wc=Ya(wc);fj(a,wc)?(c||a.u("true: "+wc),bf=!0):(c||a.u("false: "+wc),bf=!1);bf||(d=!1);break}f=!0;break;case "k":var Wk=g[0];if("?"==g[1])a.u("stack trace commands:"),a.u("\tk\tshow frame addresses"),a.u("\tks\tshow symbol information");
else{var cf=0,df=V(),xc=V(a.f.g[6]);for(a.u("stack trace for "+yj(a,xc));10>cf;){for(var lb=null,Xk=256;65536>xc.K>>>0;){df.K=a.Oa(xc,2);if(null==xc.K||!Xk--)break;if(!(df.K&1)){for(var Yk=a,Bd=df,ui=null,yc=Bd.K,vi=yc,ef=1;6>=ef&&yc;ef++){if(2<ef){Bd.K=yc;var Cd=Xj(Yk,Bd);if(0<=Cd.indexOf("JSR")){var wi=Cd.indexOf(" ");if(yc+(Cd.indexOf(" ",wi+1)-wi-1)/2==vi){ui=Cd;break}}}yc-=2}Bd.K=vi;if(lb=ui)break}}if(!lb||null==lb)break;var xi=null;if("ks"==Wk){var yi=lb.match(/[0-9A-F]+$/);yi&&(xi=ok(a,yi[0]))}lb=
Xa(lb,50)+" ;"+(xi||"stack="+yj(a,xc));a.u(lb);cf++}cf||a.u("no return addresses found")}break;case "l":if("ln"==g[0]){ok(a,g[1],!0);break}f=!0;break;case "m":a:{var Ha,Ia=null,N=g[1];"?"==N&&(N=void 0);if(void 0!==N){var Va=0;if("all"==N)Va=1879046143,N=null;else if("on"==N)Ia=!0,N=null;else if("off"==N)Ia=!1,N=null;else{"keys"==N&&(N="key");"kbd"==N&&(N="keyboard");for(Ha in Rb)if(N==Ha){Va=Rb[Ha];Ia=!!(a.ha&Va);break}if(!Va){a.u("unknown message category: "+N);break a}}if(Va)if("on"==g[2])a.ha|=
else{var cf=0,df=V(),xc=V(a.f.g[6]);for(a.u("stack trace for "+yj(a,xc));10>cf;){for(var mb=null,Xk=256;65536>xc.K>>>0;){df.K=a.Oa(xc,2);if(null==xc.K||!Xk--)break;if(!(df.K&1)){for(var Yk=a,Bd=df,ui=null,yc=Bd.K,vi=yc,ef=1;6>=ef&&yc;ef++){if(2<ef){Bd.K=yc;var Cd=Xj(Yk,Bd);if(0<=Cd.indexOf("JSR")){var wi=Cd.indexOf(" ");if(yc+(Cd.indexOf(" ",wi+1)-wi-1)/2==vi){ui=Cd;break}}}yc-=2}Bd.K=vi;if(mb=ui)break}}if(!mb||null==mb)break;var xi=null;if("ks"==Wk){var yi=mb.match(/[0-9A-F]+$/);yi&&(xi=ok(a,yi[0]))}mb=
Xa(mb,50)+" ;"+(xi||"stack="+yj(a,xc));a.u(mb);cf++}cf||a.u("no return addresses found")}break;case "l":if("ln"==g[0]){ok(a,g[1],!0);break}f=!0;break;case "m":a:{var Ha,Ia=null,N=g[1];"?"==N&&(N=void 0);if(void 0!==N){var Va=0;if("all"==N)Va=1879046143,N=null;else if("on"==N)Ia=!0,N=null;else if("off"==N)Ia=!1,N=null;else{"keys"==N&&(N="key");"kbd"==N&&(N="keyboard");for(Ha in Rb)if(N==Ha){Va=Rb[Ha];Ia=!!(a.ha&Va);break}if(!Va){a.u("unknown message category: "+N);break a}}if(Va)if("on"==g[2])a.ha|=
Va,Ia=!0;else if("off"==g[2]&&(a.ha&=~Va,Ia=!1,1073741824==Va)){for(var zi=1E3<=a.M.length?a.M.length-1E3:0;zi<a.M.length;)a.u(a.M[zi++]);a.M=[]}}var Zk=0,zc="";for(Ha in Rb)if(!N||N==Ha){var $k=!!(a.ha&Rb[Ha]);if(null===Ia||Ia==$k)zc&&(zc+=","),++Zk%10||(zc+="\n\t"),"key"==Ha&&(Ha="keys"),zc+=Ha}void 0===N&&a.u("message commands:\n\tm [category] [on|off]\tturn categories on/off");a.u((null!==Ia?Ia?"messages on: ":"messages off: ":"message categories:\n\t")+(zc||"none"));nj(a)}break;case "p":if("print"==
g[0]){pk(a,b.substr(5));break}var al=g[0];if("?"==g[1])a.u("step commands:"),a.u("\tp\tstep over instruction"),a.u("\tpr\tstep over instruction with register update");else{var Ai="pr"==al?1:0,Bi=1+Ai;if(a.I)a.u("step in progress");else{var Dd=V(a.f.g[7]),Mb=a.Oa(Dd);3==Mb||4==Mb||34816==(Mb&65280)||32256==(Mb&65024)||35072==(Mb&65280)?(a.I=Bi,wj(Dd,2)):2048==(Mb&65024)&&(Xj(a,Dd),a.I=Bi);a.I?(a.pb(a.g,Dd,!0),Nj(a)||(a.J&&ie(a.J),a.I=0)):qk(a,Ai?"tr":"t")}}break;case "r":if("reset"==b){a.J&&a.J.reset();
break}Pj(a,g);break;case "s":a:switch(g[1]){case "base":if(g[2]){var Ac=+g[2];if(8==Ac||10==Ac||16==Ac)a.xa=Ac;else{a.u("invalid base: "+Ac);break}}a.u("default base: "+a.xa);break;case "cs":var Bc;void 0!==g[3]&&(Bc=+g[3]);switch(g[2]){case "int":a.f.Ab=Bc;break;case "start":a.f.Tb=Bc;break;case "stop":a.f.Cb=Bc;break;default:a.u("unknown cs option");break a}void 0!==Bc&&ae(a.f);a.u("checksums "+(a.f.A.zb?"enabled":"disabled"));break;case "sp":void 0!==g[2]&&(fe(a.f,+g[2])||a.u("warning: using 1x multiplier, previous target not reached"));
@ -355,12 +355,12 @@ h.start=function(a,b){for(var c=za(this.id),d=0;d<c.length;d++){var e=c[d];"CPU"
function J(a,b){if(a.f){var c=a.f,d=b||0,e=c.C.speed;e&&(0>=d||30<=(c.oc+=d))&&(e.textContent=c.A.U?c.mb.toFixed(2)+"Mhz":"Stopped",c.oc=0)}if(a.i&&(a=a.i,b=b||0,a.v)){c=a.f.A.U;d=!!(a.f.i&8);if(0>=b||60<=(a.j+=b)){for(e=0;e<a.f.g.length;e++)dc(a,"R"+e,a.f.g[e]);e=ud(a.f);dc(a,"PS",e);dc(a,"NF",e&8?1:0,1);dc(a,"ZF",e&4?1:0,1);dc(a,"VF",e&2?1:0,1);dc(a,"CF",e&1?1:0,1);a.j=0}Fc(a,0<b&&c&&!d?a.f.Za:a.ua);pc(a,a.vb);b=a.f;b=b.Ha?b.T&16?1:2:4;Hc(a,"B22",b&1);Hc(a,"B18",b&2);Hc(a,"B16",b&4)}}
h.pa=function(a,b,c){var d=this;switch(b){case "power":return this.C[b]=c,c.onclick=function(){d.j||(d.A.fa?rk(d,!1,!0):Ak(d,d.Ub))},!0;case "reset":return this.C[b]=c,c.onclick=function(){if(d.A.fa&&!d.j)if(d.b&&!d.H){var a=ya("Click OK to save changes to this "+Eb+" machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");rk(d,a,!0);!a&&d.L?window&&window.location.reload():(a||(d.B=!0),d.Ub(xk),d.B=!1)}else d.reset(),d.f&&d.f.Ia()},!0;case "save":if(Ra(db(),"pcjs.org"))c.parentNode.removeChild(c);
else return this.C[b]=c,c.onclick=function(){var a=wk(d,!0);if(a){var b=!!(d.b&&!d.H||d.L),c=rk(d,b);b?bl(d,a,c):d.O("Resume disabled, machine state not saved")}},!0}return!1};
function wk(a,b){var c=a.g;c||((c=mb(Mk),void 0!==c)?!c&&b&&(b=null,window&&(b=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c=b)&&((c=dl(a,c))||a.O("The user ID is invalid.")):b&&a.O("Browser local storage is not available"));return c}
function wk(a,b){var c=a.g;c||((c=hb(Mk),void 0!==c)?!c&&b&&(b=null,window&&(b=window.prompt("Saving machine states on the pcjs.org server is currently unsupported.\n\nIf you're running your own server, enter your user ID below.","")),c=b)&&((c=dl(a,c))||a.O("The user ID is invalid.")):b&&a.O("Browser local storage is not available"));return c}
function dl(a,b){a.g=null;b=bb(db()+"/api/v1/user?req=verify&user="+b);var c=b[1];if(!b[0]&&c)try{b=eval("("+c+")"),b.code&&"ok"==b.code&&(nb(Mk,b.data),a.g=b.data)}catch(d){v(d.message+" ("+c+")")}return a.g}function zk(a){var b=null;a.g&&(b=db()+"/api/v1/user?req=load&user="+a.g+"&state="+el(a,"1.32.0"));return b}
function bl(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=el(a,"1.32.0");d.data=c;b=bb(db()+"/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.O("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.O(c),nb(Mk,""),a.g=null)}}
function Kh(a){var b;a=za(a.id);for(var c=0;c<a.length;c++){var d=a[c];if(b)b==d&&(b=null);else if("RAM"==d.type)return d}return null}function ie(a,b){if(a.Pa){var c=0,d=0;!b&&window&&(c=window.scrollX,d=window.scrollY);a.Pa.focus();!b&&window&&window.scrollTo(c,d)}}var Hk="failsafe",Ck="validate",Ek="timestamp",Ok="version",Pk="url",Sk="browser",Mk="user",Gk=-1,xk=0,Fk=1,Jk=2,cl=3;
vb(function(){for(var a=y(document,x+"-machine"),b=0;b<a.length;b++)for(var c=a[b],d=w(c),c=y(c,x,"computer"),e=0;e<c.length;e++){var f=c[e],g=w(f),g=new uk(g,d,!0);Ca(g,f);g.M&&Ak(g,g.Ub)}});wb.show.push(function(){for(var a=y(document,x,"computer"),b=0;b<a.length;b++){var c=w(a[b]);(c=Ba("Computer",c.id))&&c.R&&!c.A.fa&&c.Ub(Gk)}});wb.exit.push(function(){for(var a=y(document,x,"computer"),b=0;b<a.length;b++){var c=w(a[b]);(c=Ba("Computer",c.id))&&c.A.fa&&rk(c,!(!c.b||c.H),!0)}});
function M(a,b,c){this.id=a.id;this.b="";this.f={};this.g=this.C=!1;this.key=el(a,b,c);Kk(this,a.Fd)}h=M.prototype;h.set=function(a,b){try{this.f[a]=b}catch(c){}};h.get=function(a){return this.f[a]||null};h.data=function(){return this.f};function yk(a,b){return b?(a.b=b,a.g=!0,a.C=!1,!0):a.g?!0:eb()&&(b=mb(a.key))?(a.b=b,a.g=!0):!1}function Dk(a){var b=!0;if(!a.C)try{a.f=JSON.parse(a.b),a.C=!0}catch(c){v(c.message||c),b=!1}return b}
function M(a,b,c){this.id=a.id;this.b="";this.f={};this.g=this.C=!1;this.key=el(a,b,c);Kk(this,a.Fd)}h=M.prototype;h.set=function(a,b){try{this.f[a]=b}catch(c){}};h.get=function(a){return this.f[a]||null};h.data=function(){return this.f};function yk(a,b){return b?(a.b=b,a.g=!0,a.C=!1,!0):a.g?!0:eb()&&(b=hb(a.key))?(a.b=b,a.g=!0):!1}function Dk(a){var b=!0;if(!a.C)try{a.f=JSON.parse(a.b),a.C=!0}catch(c){v(c.message||c),b=!1}return b}
function Lk(a){var b=!0;if(eb()){var c=JSON.stringify(a.f);nb(a.key,c)||(v("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}h.toString=function(){return this.f?JSON.stringify(this.f):this.b};function Kk(a,b){a.b="";a.f={};a.g=a.C=!1;b&&a.set("parms",b)}
h.clear=function(a){Kk(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 el(a,b,c){a=a.id;if(b){var d=b.indexOf(".");0<d&&(a+=".v"+b.substr(0,d))}c&&(a+="."+c);return a}var fl=0;
function gl(a,b,c,d,e,f){e("Loading "+a+"...");bb(a,null,!0,function(g,k,l){l?(k||(k="unable to load "+a+" ("+l+")"),f(k,null)):hl(k,a,b,c,d,e,f)})}
@ -370,4 +370,4 @@ function il(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=
"");a=a.replace(d[0],g);il(a,b,c)}})}else c(a,null)}
function jl(a,b,c,d){function e(a){if(void 0===k){var b=g&&y(g,"machine-warning");k=b&&b[0]||g}k&&(k.innerHTML=Sa(a))}function f(a){e("Error: "+a);l&&(--fl||zb(!0));l=!1}var g,k,l=!0;fl++;va[a]={};try{if(g=document.getElementById(a)){var m;if("object"==typeof resources&&(m=resources.css)){var n=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css";r.styleSheet?r.styleSheet.cssText=m:r.appendChild(document.createTextNode(m));n.appendChild(r)}c||
(c="/versions/pdpjs/1.32.0/components.xsl");m=function(d,k){k?gl(c,null,null,!1,e,function(d,l){l?(ua(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window?(l=k.transformNode(l))?(g.outerHTML=l,--fl||zb(!0)):f("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(d=new XSLTProcessor,d.importStylesheet(l),(l=d.transformToFragment(k,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--fl||zb(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(d)}):f(d)};"<"!=b.charAt(0)?gl(b,a,d,!0,e,m):hl(b,null,a,d,!1,e,m)}else f("missing machine element: "+a)}catch(u){f(u.message)}return l}window.embedPDP11=function(a,b,c,d){zb(!1);return jl(a,b,c,d)};window.enableEvents=zb;window.sendEvent=Bb;})();//# sourceMappingURL=/tmp/pdpjs/1.32.0/pdp11-dbg.map
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(d)}):f(d)};"<"!=b.charAt(0)?gl(b,a,d,!0,e,m):hl(b,null,a,d,!1,e,m)}else f("missing machine element: "+a)}catch(u){f(u.message)}return l}window.embedPDP11=function(a,b,c,d){zb(!1);return jl(a,b,c,d)};window.findMachineComponent=function(a,b){return Ba(b,a+".machine")};window.enableEvents=zb;window.sendEvent=Bb;})();//# sourceMappingURL=/tmp/pdpjs/1.32.0/pdp11-dbg.map

View file

@ -280,4 +280,4 @@ function mh(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=
"");a=a.replace(d[0],g);mh(a,b,c)}})}else c(a,null)}
function nh(a,b,c,d){function e(a){if(void 0===k){var b=g&&C(g,"machine-warning");k=b&&b[0]||g}k&&(k.innerHTML=Ea(a))}function f(a){e("Error: "+a);l&&(--jh||Ya(!0));l=!1}var g,k,l=!0;jh++;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],t=document.createElement("style");t.type="text/css";t.styleSheet?t.styleSheet.cssText=m:t.appendChild(document.createTextNode(m));p.appendChild(t)}c||
(c="/versions/pdpjs/1.32.0/components.xsl");m=function(d,k){k?kh(c,null,null,!1,e,function(d,l){l?(qa(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window?(l=k.transformNode(l))?(g.outerHTML=l,--jh||Ya(!0)):f("transformNodeToObject failed"):document.implementation&&document.implementation.createDocument?(d=new XSLTProcessor,d.importStylesheet(l),(l=d.transformToFragment(k,document))?g.parentNode?(g.parentNode.replaceChild(l,g),--jh||Ya(!0)):f("invalid machine element: "+
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(d)}):f(d)};"<"!=b.charAt(0)?kh(b,a,d,!0,e,m):lh(b,null,a,d,!1,e,m)}else f("missing machine element: "+a)}catch(x){f(x.message)}return l}window.embedPDP11=function(a,b,c,d){Ya(!1);return nh(a,b,c,d)};window.enableEvents=Ya;window.sendEvent=$a;})();//# sourceMappingURL=/tmp/pdpjs/1.32.0/pdp11.map
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser")):f(d)}):f(d)};"<"!=b.charAt(0)?kh(b,a,d,!0,e,m):lh(b,null,a,d,!1,e,m)}else f("missing machine element: "+a)}catch(x){f(x.message)}return l}window.embedPDP11=function(a,b,c,d){Ya(!1);return nh(a,b,c,d)};window.findMachineComponent=function(a,b){return va(b,a+".machine")};window.enableEvents=Ya;window.sendEvent=$a;})();//# sourceMappingURL=/tmp/pdpjs/1.32.0/pdp11.map