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