81 lines
32 KiB
JavaScript
81 lines
32 KiB
JavaScript
(function(){var e;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 f,d=a,g=b;(g&&10!=g?16==g?null!==d.match(/^[0-9a-f]+$/i):2==g&&null!==d.match(/^[01]+$/i):null!==d.match(/^[0-9]+$/))&&!isNaN(f=parseInt(a,b))&&(c=f|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){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 ca(a){var b="",c=a.lastIndexOf(".");0<=c&&(b=a.substr(c+1).toLowerCase());return b}function da(){var a=p();return-1!==a.indexOf("pcjs.org",a.length-8)}
|
|
var ea={"&":"&","<":"<",">":">",'"':""","'":"'"};function fa(a){return a.replace(/[&<>"']/g,function(a){return ea[a]})}var q=Date.now||function(){return+new Date};function ga(){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 t(a,b,c,d){var f=0,g=null,k=null;if("object"==typeof resources&&(g=resources[a]))return d&&d(a,g,f),[g,f];if(c&&"function"==typeof resources)return resources(a,function(b,c){d&&d(a,b,c)}),k;var h=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject("Microsoft.XMLHTTP");c&&(h.onreadystatechange=function(){4===h.readyState&&(g=h.responseText,200==h.status||!h.status&&g.length&&"file:"==(window?window.location.protocol:"file:")||(f=h.status||-1),d&&d(a,g,f))});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,"+");h.open("POST",a,!!c);h.setRequestHeader("Content-type","application/x-www-form-urlencoded");h.send(l)}else h.open("GET",a,!!c),"bytes"==b&&h.overrideMimeType("text/plain; charset=x-user-defined"),h.send();c||(g=h.responseText,200!=h.status&&(f=h.status||-1),d&&d(a,g,f),k=[g,f]);return k}function p(){return"http://"+(window?window.location.host:"www.pcjs.org")}
|
|
function u(a){window&&window.alert(a)}function ha(a){var b=!1;window&&(b=window.confirm(a));return b}var ia=null;function ja(){if(null==ia){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}ia=a}return ia}function ka(a){var b;if(window)try{b=window.localStorage.getItem(a)}catch(c){}return b}
|
|
function v(a,b){try{return window.localStorage.setItem(a,b),!0}catch(c){}return!1}function la(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:[]},ma=!1,na=!1,oa=!0;function pa(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 qa(a){if(oa)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 y(a){!oa&&a?(oa=!0,ma&&ra("init"),na&&ra("show")):oa=a}function ra(a){w[a]&&qa(w[a])}pa("onload",function(){ma=!0;qa(w.init)});pa("onpageshow",function(){na=!0;qa(w.show)});pa(la("Opera")||la("iOS")?"onunload":"onbeforeunload",function(){qa(w.exit)});
|
|
function z(a,b,c){this.type=a;b||(b={id:"",name:""});this.id=b.id||"";this.name=b.name;this.Ca=b.comment;this.Ra=b;b=this.id.indexOf(".");0>b?this.ca=this.id:(this.Ea=this.id.substr(0,b),this.ca=this.id.substr(b+1));this[a]=c;this.b={aa:!1,ha:!1,wa:!1,u:!1,U:!1};this.la=null;this.b.U=!1;this.c={};this.v=null;A.push(this)}var sa=void 0,ta={};
|
|
if(window){sa||(sa=window.location.search.substr(1));for(var ua,va=/\+/g,wa=/([^&=]+)=?([^&]*)/g;ua=wa.exec(sa);)ta[decodeURIComponent(ua[1].replace(va," "))]=decodeURIComponent(ua[2].replace(va," "))}function xa(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 B(a,b){b||(b=z);a.prototype=xa(b.prototype);a.prototype.constructor=a;a.prototype.parent=b.prototype}if(window){window.PCjs||(window.PCjs={});var ya=window.PCjs.Machines||(window.PCjs.Machines={}),A=window.PCjs.Components||(window.PCjs.Components=[])}else ya={},A=[];function za(a,b,c){ya[a]&&b&&(ya[a][b]=c)}function C(a){var b,c=[];a&&(a=0<(b=a.indexOf("."))?a.substr(0,b+1):"");for(b=0;b<A.length;b++){var d=A[b];a&&d.id.indexOf(a)||c.push(d)}return c}
|
|
function D(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<A.length;d++)if(c)c==A[d]&&(c=null);else if(!(a!=A[d].type||b&&A[d].id.indexOf(b)))return A[d]}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 G(a,b){for(var c=H(b.parentNode,"pdp11-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 "pdp11-binding":(h=E(k))&&h.binding&&a.H(h.type,h.binding,k,h.value),m=l.length}}}}
|
|
function H(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}
|
|
z.prototype={constructor:z,parent:null,toString:function(){return this.name?this.name:this.id||this.type},H:function(a,b,c){switch(b){case "clear":return this.c[b]||(this.c[b]=c,c.onclick=function(a){return function(){a.c.print&&(a.c.print.value="")}}(this)),!0;case "print":return this.c[b]||(this.va=this.c[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.w=function(a){this.G(a,this.ca)}),!0;default:return!1}},log:function(){},G:function(){},status:function(a){this.G(this.ca+": "+a)},w:function(a,b,c){c=c||this.type;b||u((c?c+": ":"")+a)},P:function(){return this.b.u=!0},O:function(a,b){b&&(this.b.u=!1);return!0}};function Aa(a,b){if(a.b.wa)return a.b.ha&&(a.b.ha=!1),a.b.wa=!1;if(a.b.U)return a.G(a.toString()+" error"),!1;a.b.ha=b;return a.b.ha}function I(a){if(!a.b.U&&(a.b.aa=!0,a.b.aa)){var b=a.la;a.la=null;b&&b()}}
|
|
function Ba(a,b){b&&(a.b.aa?b():a.la=b);return a.b.aa}var J="undefined"!==typeof ArrayBuffer;function Ca(a){z.call(this,"Panel",a,Ca)}B(Ca);e=Ca.prototype;e.H=function(a,b,c,d){return this.a&&this.a.H(a,b,c,d)||this.f&&this.f.H(a,b,c,d)?!0:this.parent.H.call(this,a,b,c,d)};e.ba=function(a,b,c,d){this.a=a;this.i=b;this.f=c;this.v=d};e.P=function(a,b){b||Da();return!0};e.O=function(){return!0};e.V=function(){};
|
|
function Da(){for(var a=!1,b=H(document,"pdp11","panel"),c=0;c<b.length;c++){var d=b[c],f=E(d),g;a:{g=f.id;if(void 0!==g)for(var k=void 0,k=0;k<A.length;k++)if(A[k].id===g){g=A[k];break a}g=null}g||(a=!0,g=new Ca(f));G(g,d);a&&I(g)}}x(Da);
|
|
function K(a,b,c){z.call(this,"Bus",a,K);this.f=b;this.v=c;this.h=a.busWidth||16;this.l=Math.pow(2,this.h);this.s=this.l-1|0;this.g=16>=this.h?10:20>=this.h?12:24>=this.h?14:15;this.i=1<<this.g;this.m=this.i>>2;this.o=this.i-1;this.j=this.l/this.i|0;a=new L;Ea(a,this.v);this.a=Array(this.j);for(b=0;b<this.j;b++)this.a[b]=a;I(this)}B(K);K.prototype.reset=function(){};K.prototype.P=function(a,b){b||this.reset();return!0};
|
|
function Fa(a,b,c,d){for(var f=b,g=c,k=f>>>a.g;0<g&&k<a.a.length;){var h=a.a[k],l=k*a.i,m=a.i-(f-l);m>g&&(m=g);if(h&&h.size){if(h.type==d){if(f+g<=h.ga)return h.ma+=h.ga-f,h.ga=f,!0;if(f>=h.ga+h.ma){m=h.size-(f-l);m>g&&(m=g);h.ma=f-h.ga+m;f=l+a.i;g-=m;k++;continue}}return Ga(1,f,g)}f=new L(f,m,a.i,d);Ea(f,a.v,h);a.a[k++]=f;f=l+a.i;g-=m}return 0>=g?(a.status(Math.floor(c/1024)+"Kb "+Ha[d]+" at "+("0x"+n(b,4))),!0):Ga(2,b,c)}
|
|
K.prototype.xa=function(a){return this.a[(a&this.s)>>>this.g].ya(a&this.o,a)};function Ga(a,b,c){u("Memory block error ("+a+": "+n(b)+","+n(c)+")");return!1}var Ia;if(J){var Ja=new ArrayBuffer(2);(new DataView(Ja)).setUint16(0,256,!0);Ia=256===(new Uint16Array(Ja))[0]}else Ia=!1;var Ka=Ia;
|
|
function L(a,b,c,d){this.id=La+=2;this.c=null;this.ga=a;this.ma=b;this.size=c||0;this.type=d||Ma;this.j=d==Na;Ea(this);this.N=this.Oa=!1;if(c)if(J)this.a=new ArrayBuffer(c),this.i=new DataView(this.a,0,c),this.f=new Uint8Array(this.a,0,c),this.l=new Uint16Array(this.a,0,c>>1),this.c=new Int32Array(this.a,0,c>>2),Oa(this,Ka?Pa:Qa);else{this.c=Array(c>>2);for(a=0;a<this.c.length;a++)this.c[a]=0;Oa(this,Ra)}else Oa(this)}var Ma=0,Na=2,Ha=["NONE","RAM","ROM","VID","H/W"],La=0;
|
|
L.prototype={constructor:L,parent:null,save:function(){var a,b;if(J)for(a=Array(this.size>>2),b=0;b<a.length;b++)a[b]=this.i.getInt32(b<<2,!0);else a=this.c;return a},restore:function(a){if(a&&this.size==a.length<<2){var b;if(J)for(b=0;b<a.length;b++)this.i.setInt32(b<<2,a[b],!0);else this.c=a;return this.N=!0}return!1},m:function(){return 255},s:function(){},L:function(a,b){return this.ya(a++,b++)|this.ya(a,b)<<8},ca:function(a,b,c){this.o(a++,b&255,c++);this.o(a,b>>8,c)},F:function(a){return this.c[a>>
|
|
2]>>>((a&3)<<3)&255},S:function(a){var b=a>>2;a=(a&3)<<3;var c=this.c[b]>>a;return 24>a?c&65535:c&255|(this.c[b+1]&255)<<8},Y:function(a,b){var c=a>>2,d=(a&3)<<3;this.c[c]=this.c[c]&~(255<<d)|b<<d;this.N=!0},fa:function(a,b){var c=a>>2,d=(a&3)<<3;24>d?this.c[c]=this.c[c]&~(65535<<d)|b<<d:(this.c[c]=this.c[c]&16777215|b<<24,c++,this.c[c]=this.c[c]&-256|b>>8);this.N=!0},B:function(a,b){return this.C(a,b)},K:function(a,b){return this.M(a,b)},W:function(a,b,c){this.j||this.Ma(a,b,c)},$:function(a,b,c){this.j||
|
|
this.da(a,b,c)},A:function(a){return this.f[a]},D:function(a){return this.f[a]},I:function(a){return this.i.getUint16(a,!0)},R:function(a){return a&1?this.f[a]|this.f[a+1]<<8:this.l[a>>1]},T:function(a,b){this.f[a]=b;this.N=!0},X:function(a,b){this.f[a]=b;this.N=!0},Z:function(a,b){this.i.setUint16(a,b,!0);this.N=!0},ea:function(a,b){a&1?(this.f[a]=b,this.f[a+1]=b>>8):this.l[a>>1]=b;this.N=!0}};function Ea(a,b,c){a.v=b;a.g=a.h=0;c&&((a.g=c.g)&&Sa(a,Ta,!1),(a.h=c.h)&&Ua(a,Ta,!1))}
|
|
function Ua(a,b,c){c&&a.h||(a.o=!a.j&&b[2]||a.s);if(c||void 0===c)a.Ma=b[2]||a.s,a.da=b[3]||a.ca}function Sa(a,b,c){c&&a.g||(a.ya=b[0]||a.m);if(c||void 0===c)a.C=b[0]||a.m,a.M=b[1]||a.L}function Oa(a,b){b||(b=Va);Sa(a,b,void 0);Ua(a,b,void 0)}var Va=[],Ra=[L.prototype.F,L.prototype.S,L.prototype.Y,L.prototype.fa],Ta=[L.prototype.B,L.prototype.K,L.prototype.W,L.prototype.$];if(J)var Qa=[L.prototype.A,L.prototype.I,L.prototype.T,L.prototype.Z],Pa=[L.prototype.D,L.prototype.R,L.prototype.X,L.prototype.ea];
|
|
function M(a,b){z.call(this,"CPU",a,M);var c=a.multiplier||1;this.ea=a.cycles||b;this.D=c;this.da=Math.round(this.ea/1E4)/100;this.B=this.da*this.D;this.b.J=!1;this.b.Ha=!1;this.b.Fa=a.autoStart;this.b.Ga=!1;this.b.ja=!1;this.Y=this.C=0;this.Z=a.csStart;this.K=a.csInterval;this.L=a.csStop;this.W=[];this.Qa=this.za.bind(this);I(this)}B(M);var Wa=["power","reset"];e=M.prototype;
|
|
e.ba=function(a,b,c,d){this.a=a;this.i=b;this.v=d;for(b=0;b<Wa.length;b++)(c=this.c[Wa[b]])&&this.a.H(null,Wa[b],c);this.I=null;a=Xa(a,"autoStart");null!=a&&(this.b.Fa="true"==a?!0:"false"==a?!1:!!a);I(this)};e.reset=function(){};e.save=function(){return null};e.restore=function(){return!1};e.P=function(a,b){if(!b){if(a&&this.restore){Ya(this);if(!this.restore(a))return!1;Za(this)}else this.reset();this.G("No debugger detected")}$a(this);return!0};e.O=function(a){return a?this.save():!0};
|
|
function ab(a){(a.b.Fa||void 0===a.c.run)&&a.za()}e.Ka=function(){return 0};function Za(a){void 0===a.Z&&(a.Z=0);void 0===a.K&&(a.K=-1);void 0===a.L&&(a.L=-1);a.b.ja=0<=a.Z&&0<a.K;a.b.ja&&(a.Y=0,a.C=a.Z-a.s)}function N(a,b,c,d){a.c[b]&&(void 0===c&&(a.b.U=!0,a.w("Value for "+b+" is invalid"),O(a)),c=!a.b.J||a.b.Ga?n(c,d):"--------".substr(0,d),a.c[b].textContent!=c&&(a.c[b].textContent=c))}
|
|
e.H=function(a,b,c){var d=this;a=!1;switch(b){case "power":case "reset":this.c[b]=c;a=!0;break;case "run":this.c[b]=c;c.onclick=function(){var a;if(a=d.a)if(a=d.a,a.b.u)a=!0;else{var b=null,c,h=C(a.id);for(c=0;c<h.length&&(b=h[c],b===a||b.b.aa);c++);if(c==h.length)for(c=0;c<h.length&&(b=h[c],b===a||b.b.u);c++);c==h.length&&(b=a);u("The "+b.type+" component ("+b.id+") is not "+(b.b.aa?"powered yet":"ready yet"+(b.la?" (waiting for notification)":""))+".");a=!1}a&&(d.b.J?O(d):d.za())};a=!0;break;case "speed":this.c[b]=
|
|
c;a=!0;break;case "setSpeed":this.c[b]=c,c.onclick=function(){P(d,d.D<<1)},c.textContent=this.B.toFixed(2)+"Mhz",a=!0}return a};function bb(a,b,c){a.s+=b;c&&(a.h=a.f=0)}function cb(a,b){var c=1;b&&1<a.D&&a.m&&(c=a.m/a.da);a.Ia=Math.round(1E3/30);a.$=Math.floor(a.ea/30*c);b||(a.M=a.$);a.fa=0}function Q(a){return a.s+a.l+a.h-a.f}function Ya(a){a.m=0;a.Ja=0;a.s=a.l=a.h=a.f=0;Za(a);P(a,1)}
|
|
function P(a,b){if(void 0!==b){.8>a.m/a.B&&(b=1);a.D=b;var c=a.da*a.D;if(a.B!=c){a.B=c;var c=a.B.toFixed(2)+"Mhz",d=a.c.setSpeed;d&&(d.textContent=c);a.G("target speed: "+c)}}bb(a,a.l);a.l=0;a.j=q();a.o=0;cb(a)}
|
|
e.za=function(){if(Aa(this,!0)){if(!this.b.J){P(this);this.a&&this.a.start(this.j,Q(this));this.b.J=!0;this.b.Ha=!0;this.I&&this.I.start();var a=this.c.run;a&&(a.textContent="Halt");this.a&&this.a.V(!0)}this.fa>=this.ea&&cb(this,!0);this.R=0;this.X=q();this.o&&(a=this.X-this.o,a>this.Ia&&(this.j+=a,this.j>this.X&&(this.j=this.X)));try{do{for(var b=this.b.ja?1:this.$,c=this.W.length-1;0<=c;c--){var d=this.W[c];0>d[0]||b>d[0]&&(b=d[0])}this.La(b);for(var f=this.h-this.f,a=f,g=this.W.length-1;0<=g;g--){var k=
|
|
this.W[g];0>k[0]||(k[0]-=a,0>=k[0]&&(k[0]=-1,k[1]()))}this.R+=f;this.l+=f;bb(this,0,!0);a=f;if(this.b.ja){var h=!1;this.Y=this.Y+this.Ka()|0;this.C-=a;0>=this.C&&(this.C+=this.K,h=!0);0<=this.L&&this.L<=Q(this)&&(this.K=this.L=-1,Za(this),O(this),h=!0);h&&this.G(Q(this)+" cycles: checksum="+n(this.Y))}this.M-=f;if(0>=this.M){this.M+=this.$;15<=++this.Ja&&(this.a&&this.a.V(),this.Ja=0);break}}while(this.b.J)}catch(l){O(this);$a(this);this.a&&this.a.stop(q(),Q(this));Aa(this,!1);b=l.stack||l.message;
|
|
this.b.U=!0;this.w(b);return}b=setTimeout;c=this.Qa;this.o=q();d=this.Ia;this.R&&(d=Math.round(d*this.R/this.$));d=d-(this.o-this.X);if(f=this.o-this.j)this.m=Math.round(this.l/(10*f))/100,864E5<=f&&(this.s=0,P(this));if(0>d||this.m<this.B)-1E3>d&&(this.j-=d),d=0;this.fa+=this.R;this.o+=d;b(c,d)}else $a(this),this.a&&this.a.stop(q(),Q(this))};e.La=function(){return 0};
|
|
function O(a){a.b.ha&&(a.b.wa=!0);a.h-=a.f;a.f=0;bb(a,a.l);a.l=0;if(a.b.J){a.b.J=!1;a.I&&a.I.stop();var b=a.c.run;b&&(b.textContent="Run")}a.b.ka=void 0}function $a(a){a.a&&a.a.V(void 0)}function db(a){this.Pa=+a.model||1170;M.call(this,a,1E6);this.Aa=eb;Ya(this);this.b.ka=this.b.Na=!1;this.Ba=0;fb(this)}B(db,M);e=db.prototype;e.reset=function(){this.b.J&&O(this);fb(this);Ya(this);this.b.U=!1;this.parent.reset.call(this)};
|
|
function fb(a){a.oa=0;a.pa=0;a.qa=0;a.ra=0;a.sa=0;a.ta=0;a.na=0;a.ua=0;a.A=0;gb(a,0);a.g=0}e.Ka=function(){var a=this.oa+this.pa+this.qa+this.ra+this.sa+this.ta+this.na|0;return a=a+this.ua+this.A+hb(this)|0};
|
|
e.save=function(){var a=new R(this);S(a,0,[this.oa,this.pa,this.qa,this.ra,this.sa,this.ta,this.na,this.ua,this.A,hb(this)]);S(a,1,[this.g,this.s,this.D]);for(var b=this.i,c=0,d=[],f=0;f<b.j;f++){var g=b.a[f];if(g.N||g.Oa){d[c++]=f;var k=c++;a:if(g=g.save()){for(var h=0,l=0,m=[];h<g.length;){for(var F=g[h],r=h+1;r<g.length&&g[r]===F;)r++;m[l++]=r-h;m[l++]=F;h=r}if(m.length<g.length){g=m;break a}}d[k]=g}}S(a,2,d);return a.data()};
|
|
e.restore=function(a){var b=a[0];this.oa=b[0];this.pa=b[1];this.qa=b[2];this.ra=b[3];this.sa=b[4];this.ta=b[5];this.na=b[6];this.ua=b[7]&65535;this.A=b[8]&65535;gb(this,b[9]);b=a[1];this.g=b[0];this.s=b[1];P(this,b[3]);a:{b=this.i;a=a[2];var c;for(c=0;c<a.length-1;c+=2){var d=a[c],f=a[c+1];if(f&&f.length<b.m){for(var g=0,k=Array(b.m),h=0;h<f.length-1;)for(var l=f[h++],m=f[h++];l--;)k[g++]=m;f=k}g=b.a[d];if(!g||!g.restore(f)){u("Unable to restore memory block "+d);b=!1;break a}}b=!0}return b};
|
|
e.H=function(a,b,c){var d=!1;switch(b){case "PC":case "PSW":case "IF":case "SF":case "ZF":case "CF":this.c[b]=c;this.Ba++;d=!0;break;default:d=this.parent.H.call(this,a,b,c)}return d};function hb(a){return a.S&-214|(a.T&128?128:0)|(a.F&255?0:64)|(a.F&256?1:0)}function gb(a,b){a.F=a.T=0;b&1&&(a.F|=256);b&4||(a.T|=1);b&64||(a.F|=255);b&128&&(a.T^=192);a.S=a.S&-726|b&512|2}e.xa=function(a){return this.i.xa(a)};function ib(a){var b=a.xa(a.A);a.A=a.A+1&65535;return b}
|
|
e.V=function(a){this.Ba&&(a||!this.b.J||this.b.Ga)&&(N(this,"PC",this.A,4),a=hb(this),N(this,"PSW",a,4),N(this,"IF",a&512?1:0,1),N(this,"SF",a&128?1:0,1),N(this,"ZF",a&64?1:0,1),N(this,"CF",a&1?1:0,1));if(a=this.c.speed)a.textContent=this.b.J&&this.m?this.m.toFixed(2)+"Mhz":"Stopped"};
|
|
e.La=function(a){this.b.ka=!0;this.b.Na=!1;this.b.Ha=!1;this.h=this.f=a;if(this.f&&this.g&255&&this.S&512){for(a=0;8>a&&!(this.g&1<<a);a++);this.g&=~(0>a?255:1<<a);this.S&=-513;this.g&=-257;this.Aa[199|a<<3].call(this)}this.g&256?(this.h-=this.f,this.f=0,a=!1):a=!0;if(a){do this.Aa[ib(this)].call(this);while(0<this.f)}return this.b.ka?this.h-this.f:void 0===this.b.ka?0:-1};x(function(){for(var a=H(document,"pdp11","cpu"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new db(d);G(d,c)}});
|
|
function T(){this.f-=4}
|
|
var eb=[T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,T,
|
|
T,T,T,T,T,T,T,T,T];function U(a){z.call(this,"ROM",a,U);this.a=null;this.m=a.addr;this.g=a.size;this.o=a.writable;this.h=a.alias;this.j=a.file;this.s=ba(this.j);if(this.j){a=this.j;var b=ca(this.s);"json"!=b&&"hex"!=b&&(a=p()+"/api/v1/dump?file="+this.j+"&format=bytes&decimal=true");var c=this;t(a,null,!0,function(a,b,g){jb(c,a,b,g)})}}B(U);U.prototype.ba=function(a,b,c,d){this.i=b;this.f=c;this.v=d;kb(this)};
|
|
U.prototype.P=function(){this.l&&(this.v&&this.v.f(this.id,this.m,this.g,this.l),delete this.l);return!0};U.prototype.O=function(){return!0};
|
|
function jb(a,b,c,d){if(d)a.w("Unable to load system ROM (error "+d+": "+b+")");else{za(a.Ea,b,c);if("["==c.charAt(0)||"{"==c.charAt(0))try{var f=eval("("+c+")"),g=f.bytes,k=f.data;if(g)a.a=g;else if(k)for(a.a=Array(4*k.length),d=c=0;c<k.length;c++)a.a[d++]=k[c]&255,a.a[d++]=k[c]>>8&255,a.a[d++]=k[c]>>16&255,a.a[d++]=k[c]>>24&255;else a.a=f;a.l=f.symbols;if(!a.a.length){u("Empty ROM: "+b);return}if(1==a.a.length){u(a.a[0]);return}}catch(h){a.w("ROM data error: "+h.message);return}else for(b=c.replace(/\n/gm,
|
|
" ").replace(/ +$/,"").split(" "),a.a=Array(b.length),f=0;f<b.length;f++)a.a[f]=aa(b[f]);kb(a)}}
|
|
function kb(a){if(!Ba(a))if(!a.j)I(a);else if(a.a&&a.i){a.g||(a.g=a.a.length);if(a.a.length!=a.g){var b="ROM size (0x"+n(a.a.length)+") does not match specified size ("+("0x"+n(a.g))+")";a.b.U=!0;a.w(b)}else{b=a.m;if(Fa(a.i,b,a.g,a.o?1:Na)){var c;for(c=0;c<a.a.length;c++){var d=a.i,f=b+c;d.a[(f&d.s)>>>d.g].Ma(f&d.o,a.a[c]&255,f)}b=!0}else b=!1;if(b){b=[];"number"==typeof a.h?b.push(a.h):null!=a.h&&a.h.length&&(b=a.h);for(c=0;c<b.length;c++){for(var g=a,d=b[c],f=g.i,k=g.g,h=[],l=g.m>>>f.g;0<k&&l<f.a.length;)h.push(f.a[l++]),
|
|
k-=f.i;f=g.i;g=g.g;k=0;for(d>>>=f.g;0<g&&d<f.a.length;){l=h[k++];if(!l)break;f.a[d++]=l;g-=f.i}}delete a.a}}I(a)}}x(function(){for(var a=H(document,"pdp11","rom"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new U(d);G(d,c)}});function lb(a){z.call(this,"RAM",a,lb);this.h=a.addr;this.g=a.size;this.a=!1}B(lb);e=lb.prototype;e.ba=function(a,b,c,d){this.i=b;this.f=c;this.v=d;I(this)};e.P=function(a,b){b||this.reset();return!0};e.O=function(a){return a?this.save():!0};
|
|
e.reset=function(){!this.a&&this.g&&Fa(this.i,this.h,this.g,1)&&(this.a=!0);this.a||u("No RAM allocated")};e.save=function(){return null};e.restore=function(){return!0};x(function(){for(var a=H(document,"pdp11","ram"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new lb(d);G(d,c)}});function V(a){z.call(this,"Keyboard",a,V);I(this)}B(V);V.prototype.H=function(){return!1};V.prototype.ba=function(a,b,c,d){this.a=a;this.f=c;this.v=d;this.I=null};
|
|
x(function(){for(var a=H(document,"pdp11","keyboard"),b=0;b<a.length;b++){var c=a[b],d=E(c),d=new V(d);G(d,c)}});
|
|
function mb(a,b,c){z.call(this,"Computer",a,mb);this.b.u=!1;nb(this,b);this.B=Xa(this,"autoPower",a);this.h=0;this.K=a.busWidth||a.buswidth;this.a=W;this.s=null;this.m=this.F=!1;this.L=Xa(this,"url")||"";(Math.random()+.1).toString(36);this.g=ob(this);if(this.f=D("CPU",this.id)){this.v=D("Debugger",this.id);this.i=new K({id:this.Ea+".bus",busWidth:this.K},this.f,this.v);var d,f=C(this.id);if((this.j=D("Panel",this.id))&&this.j.va)for(b=0;b<f.length;b++)d=f[b],d.w=this.j.w,d.G=this.j.G,d.va=this.j.va;
|
|
this.G("PDP11 v1.24.2\nCopyright \u00a9 2012-2016 Jeff Parsons <Jeff@pcjs.org>\nLicense: GPL version 3 or later <http://gnu.org/licenses/gpl.html>");for(b=0;b<f.length;b++)d=f[b],d.ba&&d.ba(this,this.i,this.f,this.v);b=null;d=a.resume;void 0!==d&&(1<d.length?b=this.o=d:this.a=parseInt(d,10));var g;if(a=Xa(this,"state")||(g=!0,a.state))b=this.C=a,g||(this.m=!0,this.a=W),this.a&&(this.A=new R(this,"1.24.2"),X(this.A)?b=null:delete this.A);!b&&this.a&&(b=pb(this))&&(this.m=!0);if(b){var k=this;t(b,null,
|
|
!0,function(a,b,c){c?(k.o=null,k.m=!1,k.w("Unable to load machine state from server (error "+c+(b?": "+(String.prototype.trim?b.trim():b.replace(/^\s+|\s+$/g,"")):"")+")")):(k.s=b,k.F=!0);I(k)})}else I(this);this.c.power||(this.B=!0);!c&&this.B&&Y(this,this.ia)}else u("Unable to find CPU component")}B(mb);var W=0;function nb(a,b){if(!b){var c;if("object"==typeof resources&&(c=resources.parms))try{b=eval("("+c+")")}catch(d){u(d.message+" ("+c+")")}}a.I=b}
|
|
function Xa(a,b,c){var d=b.toLowerCase(),d=ta[b]||ta[d];void 0===d&&a.I&&(d=a.I[b]);void 0===d&&c&&(d=c[b]);void 0===d&&"object"==typeof resources&&resources[b]&&(d=b);return d}function Y(a,b,c){for(var d=C(a.id),f=0;f<=d.length;f++){var g=f<d.length?d[f]:a;if(!Ba(g)){Ba(g,function(){Y(a,b,c)});return}}b.call(a,c)}
|
|
function qb(a,b){var c=new R(a,"1.24.2","validate");if(X(c)&&rb(c)){var d=Z(c,"timestamp"),f=b?Z(b,"timestamp"):"unknown";d!=f&&(a.w("Machine state may be out-of-date\n("+d+" vs. "+f+")\nCheck your browser's local storage limits"),b||c.clear())}}e=mb.prototype;
|
|
e.ia=function(a){void 0===a&&(a=this.a||(this.s?1:W));if(!this.h){this.h++;var b=!1,c=!1;this.D=!1;var d=this.A||new R(this,"1.24.2");if(-1==a)b=!0;else if(a>W){if(X(d,this.s)){this.l=new R(this,"1.24.2","failsafe");X(this.l)&&(sb(this,d),a=2,tb(this.l));S(this.l,"timestamp",ga());ub(this.l);var f=this.a&&!this.m;if(1==a||ha("Click OK to restore the previous PDP11 machine state, or CANCEL to reset the machine.")){if(c=rb(d)){var g=Z(d,"code"),k=Z(d,"data");g&&("ok"==g?X(d,k):("error"==g&&"no machine state"!=
|
|
k?(this.w("Error: "+k),"unable to verify user"==k&&(v("user",""),this.g=null)):this.G(g+": "+k),tb(d),X(d)?(c=rb(d),f=!0):c=!1))}f&&qb(this,c?d:null)}else 2==a&&d.clear()}else qb(this);delete this.s;delete this.A}f=C(this.id);for(g=0;g<f.length;g++)k=f[g],k!==this&&k!=this.f&&(c=vb(this,k,d,b,c));b=[d,a,c];-1!=a?Y(this,this.Da,b):this.Da(b)}};
|
|
function vb(a,b,c,d,f){if(!b.b.u){b.b.u=!0;if(b.P){var g=null;f&&((g=Z(c,b.id))||(g=Z(c,b.id.replace(/[a-z0-9]\./i,"."))));"string"===typeof g&&(g=null);!b.P(g,d)&&g&&(u("Unable to restore state for "+b.type),a.C&&!a.F?(c.clear(),a.a=W,window&&window.location.reload()):a.D=!0,b.P(null),f=!1)}if(!d&&b.Ca)for(a=b.Ca.split("|"),c=0;c<a.length;c++)b.status(a[c])}return f}
|
|
e.Da=function(a){var b=a[0],c=0>a[1];a=a[2];this.M=!0;this.b.u=!0;var d=this.c.power;d&&(d.textContent="Shutdown");this.f&&(vb(this,this.f,b,c,a),ab(this.f));this.D&&(sb(this,b),b.clear());!c&&this.l&&(this.l.clear(),delete this.l);this.h=0};
|
|
function sb(a,b){if(ha("There may be a problem with your PDP11 machine.\n\nTo help us diagnose it, click OK to send this PDP11 machine state to http://www.pcjs.org.")){var c=a.g||"",d=b.toString(),f={app:"PDP11",ver:"1.24.2"};f.url=a.L;f.user=c;f.type="bug";f.data=d;t("http://www.pcjs.org/api/v1/report",f,!0)}}
|
|
function wb(a,b,c){var d,f="none";if(a.h)return null;a.h--;var g=new R(a,"1.24.2"),k=new R(a,"1.24.2","validate"),h=ga();S(k,"timestamp",h);S(g,"timestamp",h);S(g,"version","1.24.2");S(g,"url",window?window.location.href:null);S(g,"browser",window?window.navigator.userAgent:"");a.f&&a.f.O&&(c&&O(a.f),d=a.f.O(b,c),"object"===typeof d&&S(g,a.f.id,d),c&&(a.f.b.u=!1,!1===d&&(f=null)));for(var h=C(a.id),l=0;l<h.length;l++){var m=h[l];m.b.u&&(m.O&&(d=m.O(b,c),"object"===typeof d&&S(g,m.id,d)),c&&(m.b.u=
|
|
!1,!1===d&&(f=null)))}f&&(c?(h=d=!1,b?(a.g&&xb(a,a.g,g.toString()),ub(k)&&ub(g)||(f=null,d=h=!0)):a.a&&(d=!0,h=3==a.a),d&&g.clear(h)):f=g.toString());c&&(a.b.u=!1,b=a.c.power)&&(b.textContent="Power");a.h=0;return f}e.reset=function(){this.i&&this.i.reset&&this.i.reset();for(var a=C(this.id),b=0;b<a.length;b++){var c=a[b];c!==this&&c!==this.i&&c.reset&&c.reset()}};e.start=function(a,b){for(var c=C(this.id),d=0;d<c.length;d++){var f=c[d];"CPU"!=f.type&&f!==this&&f.start&&f.start(a,b)}};
|
|
e.stop=function(a,b){for(var c=C(this.id),d=0;d<c.length;d++){var f=c[d];"CPU"!=f.type&&f!==this&&f.stop&&f.stop(a,b)}};
|
|
e.H=function(a,b,c){var d=this;switch(b){case "power":return this.c[b]=c,c.onclick=function(){d.h||(d.b.u?wb(d,!1,!0):Y(d,d.ia))},!0;case "reset":return this.c[b]=c,c.onclick=function(){if(d.b.u&&!d.h)if(d.a&&!d.o){var a=ha("Click OK to save changes to this PDP11 machine.\n\nWARNING: If you CANCEL, all disk changes will be discarded.");wb(d,a,!0);!a&&d.C?window&&window.location.reload():d.ia(W)}else d.reset(),d.f&&ab(d.f)},!0;case "save":if(da()){c.parentNode.removeChild(c);break}this.c[b]=c;c.onclick=
|
|
function(){var a=ob(d,!0);if(a){var b=!!(d.a&&!d.o||d.C),c=wb(d,b);b?xb(d,a,c):d.w("Resume disabled, machine state not saved")}};return!0}return!1};function ob(a,b){var c=a.g;c||(c=ka("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=yb(a,c))||a.w("The user ID is invalid."))):b&&a.w("Browser local storage is not available"));return c}
|
|
function yb(a,b){a.g=null;var c=t(p()+"/api/v1/user?req=verify&user="+b),d=c[1];if(!c[0]&&d)try{c=eval("("+d+")"),c.code&&"ok"==c.code&&(v("user",c.data),a.g=c.data)}catch(f){u(f.message+" ("+d+")")}return a.g}function pb(a){var b=null;a.g&&(b=p()+"/api/v1/user?req=load&user="+a.g+"&state="+zb(a,"1.24.2"));return b}
|
|
function xb(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=zb(a,"1.24.2");d.data=c;b=t(p()+"/api/v1/user",d);d=b[0];if(b[1]){if(d){var f=d.indexOf("\n");0<f&&(d=d.substr(0,f));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[1]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.w("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.w(c),v("user",""),a.g=null)}}e.V=function(a){this.f&&this.f.V(a);this.j&&this.j.V(a)};
|
|
x(function(){for(var a=H(document,"pdp11-machine"),b=0;b<a.length;b++)for(var c=a[b],d=E(c),c=H(c,"pdp11","computer"),f=0;f<c.length;f++){var g=c[f],k=E(g),k=new mb(k,d,!0);G(k,g);k.B&&Y(k,k.ia)}});w.show.push(function(){for(var a=H(document,"pdp11","computer"),b=0;b<a.length;b++){var c=E(a[b]);(c=D("Computer",c.id))&&c.M&&!c.b.u&&c.ia(-1)}});w.exit.push(function(){for(var a=H(document,"pdp11","computer"),b=0;b<a.length;b++){var c=E(a[b]);(c=D("Computer",c.id))&&c.b.u&&wb(c,!(!c.a||c.o),!0)}});
|
|
function R(a,b,c){this.id=a.id;this.key=zb(a,b,c);this.v=a.v;tb(this,a.Ra)}function zb(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}
|
|
R.prototype={constructor:R,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){tb(this);var b=[];try{for(var c=0,d=window.localStorage.length;c<d;c++)b.push(window.localStorage.key(c))}catch(f){}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(f){}b.splice(c,1);c=0}}};
|
|
function tb(a,b){a[a.id]={};b&&S(a,"parms",b);a.c=!1}function ub(a){var b=!0;if(ja()){var c=JSON.stringify(a[a.id]);v(a.key,c)||(u("Unable to store "+c.length+" bytes in browser local storage"),b=!1)}return b}function rb(a){var b=!0;try{a[a.id]=JSON.parse(a[a.id])}catch(c){u(c.message||c),b=!1}return b}function X(a,b){return b?(a[a.id]=b,a.c=!0):a.c?!0:ja()&&(b=ka(a.key))?(a[a.id]=b,a.c=!0):!1}function Z(a,b){return a[a.id][b]||null}function S(a,b,c){try{a[a.id][b]=c}catch(d){}}var Ab=0;
|
|
function Bb(a,b,c,d,f,g){f("Loading "+a+"...");t(a,null,!0,function(k,h,l){l?(h||(h="unable to load "+a+" ("+l+")"),g(h,null)):Cb(h,a,b,c,d,f,g)})}
|
|
function Cb(a,b,c,d,f,g,k){function h(a,g){if(g)k(g,null);else{if(c){za(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>)/,"$1pdp11$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(r){h=null,a=r.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);k(a,h)}}a?f?Db(a,g,h):h(a,null):k("no data"+(b?" for file: "+b:""),null)}
|
|
function Db(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var f=d[2];b("Loading "+f+"...");t(f,null,!0,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,F=/( [a-z]+=)(['"])(.*?)\2/g;m=F.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);Db(a,b,c)}})}else c(a,null)}
|
|
function Eb(a,b,c,d){function f(a){if(void 0===h){var b=k&&H(k,"machine-warning");h=b&&b[0]||k}h&&(h.innerHTML=fa(a))}function g(a){f("Error: "+a);l&&(--Ab||y(!0));l=!1}var k,h,l=!0;Ab++;ya[a]={};try{if(k=document.getElementById(a)){var m;if("object"==typeof resources&&(m=resources.css)){var F=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));F.appendChild(r)}c||
|
|
(c="/versions/pdp11/1.24.2/components.xsl");m=function(d,h){h?Bb(c,null,null,!1,f,function(d,l){if(l)if(za(a,c,d),f("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var m=h.transformNode(l);m?(k.outerHTML=m,--Ab||y(!0)):g("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(m=new XSLTProcessor,m.importStylesheet(l),(m=m.transformToFragment(h,document))?k.parentNode?(k.parentNode.replaceChild(m,k),--Ab||y(!0)):g("invalid machine element: "+
|
|
a):g("transformToFragment failed")):g("unable to transform XML: unsupported browser");else g(d)}):g(d)};"<"!=b.charAt(0)?Bb(b,a,d,!0,f,m):Cb(b,null,a,d,!1,f,m)}else g("missing machine element: "+a)}catch(Fb){g(Fb.message)}return l}window.embedPDP11=function(a,b,c,d){y(!1);return Eb(a,b,c,d)};window.enableEvents=y;window.sendEvent=ra;})();
|